{"id":16310,"date":"2023-11-13T08:53:21","date_gmt":"2023-11-13T16:53:21","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/?p=16310"},"modified":"2023-11-22T00:09:51","modified_gmt":"2023-11-22T08:09:51","slug":"use-microsoft-graph-connectors-to-securely-bring-external-content-into-microsoft-365","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/use-microsoft-graph-connectors-to-securely-bring-external-content-into-microsoft-365\/","title":{"rendered":"Use Microsoft Graph connectors to securely bring external content into Microsoft 365"},"content":{"rendered":"<p><span style=\"font-size: 12pt; text-align: var(--bs-body-text-align);\">Over the past few weeks, we\u2019ve been exploring Microsoft Graph connectors and seen how to work smarter and more efficiently by accessing your external data sources within Microsoft 365 alongside your internal content. In this post, we will show you to securely import external content to Microsoft 365 with Microsoft Graph connectors, and how this can benefit you and your organization.<\/span><\/p>\n<h2>Why you should consider importing external content to Microsoft 365<\/h2>\n<p>By using Microsoft Graph connectors, you can import content from various external sources into Microsoft 365. This not only allows you and your colleagues to easily find relevant information in your organization from one place but also to discover new content and easily share it with your colleagues. What\u2019s more, when you start using Microsoft 365 Copilot, importing external content to Microsoft 365 will allow Copilot to reason over more of your organization\u2019s information, giving you more relevant responses.<\/p>\n<h2>Importing external content with correct permissions<\/h2>\n<p>Information that you store outside of Microsoft 365 is either accessible by everyone in your organization or only <a id=\"post-16310-_Int_apqsbvml\"><\/a>by a select group of people. The permissions for accessing external content are stored in the external system.<\/p>\n<p>When importing content using Microsoft Graph connectors, you retrieve content <strong>and<\/strong> its permissions from your external system. Using this information, for each piece of content that you import, you build an <strong>access control list (ACL)<\/strong> and include it with the item when it\u2019s imported to Microsoft 365.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-16312\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-1.png\" alt=\"Chart showing how Microsoft Graph connector exports content and its permissions from an external system and imports secured content to Microsoft 365\" width=\"1099\" height=\"482\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-1.png 1099w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-1-300x132.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-1-1024x449.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-1-768x337.png 768w\" sizes=\"(max-width: 1099px) 100vw, 1099px\" \/><\/p>\n<p>This lets you ensure that only individuals specified in the external system can access the imported content. When importing external content using Microsoft Graph connectors, you have several options to ensure that it&#8217;s accessible by the same group of people who can access it in the external system.<\/p>\n<h2>Anatomy of an access control list<\/h2>\n<p>An access control list is an array of access control entries. Each entry consists of three elements:<\/p>\n<ol>\n<li><strong>Access type<\/strong>, which specifies if the entry is for granting or denying access to the piece of content<\/li>\n<li><strong>Type<\/strong>, which specifies the type of entity described by the entry. It can be a Microsoft Entra user, Entra group, everyone in your tenant, everyone except guest users, or an external group (i.e., group that\u2019s defined in your external system)<\/li>\n<li><strong>Value<\/strong>, which identifies the entity described by the entry<\/li>\n<\/ol>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-16313\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-2.png\" alt=\"Example with code of an access control list\" width=\"624\" height=\"295\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-2.png 624w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2023\/11\/word-image-16310-2-300x142.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/p>\n<p><strong>PRO TIP:<\/strong> Each imported item must include at least one access control entry. You can also include multiple entries to make the item accessible by multiple groups of people.<\/p>\n<p>Let\u2019s have a look at some common scenarios of how you\u2019d ensure correct access to your imported content.<\/p>\n<h2 aria-level=\"2\">Importing content available to everyone in the organization<\/h2>\n<p>One of the most common scenarios is importing external content that\u2019s available to everyone in the organization. If you\u2019re importing such content, you can use the following access control entry on all content items:<\/p>\n<p style=\"padding-left: 40px;\"><span class=\"EOP SCXW184559061 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559739&quot;:160,&quot;335559740&quot;:279}\"><span class=\"EOP SCXW188959082 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:720,&quot;335559739&quot;:160,&quot;335559740&quot;:279}\"><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\">Access type:<\/span><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\"> grant<\/span><\/span><span class=\"LineBreakBlob BlobObject DragDrop SCXW188959082 BCX8\"><span class=\"SCXW188959082 BCX8\">\u00a0<\/span><br class=\"SCXW188959082 BCX8\" \/><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\">Type:<\/span><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\"> Everyone<\/span><\/span><span class=\"LineBreakBlob BlobObject DragDrop SCXW188959082 BCX8\"><span class=\"SCXW188959082 BCX8\">\u00a0<\/span><br class=\"SCXW188959082 BCX8\" \/><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\">Value:<\/span><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\"> Everyone<\/span><\/span> <\/span> <\/span><\/p>\n<h2>Importing content available only to specific group of people from an external system with single sign-on with Microsoft 365<\/h2>\n<p>If your external system has single sign-on with Microsoft 365, your external content is secured with users and groups from Microsoft Entra ID (previously Azure Active Directory). In such cases, you can define access control entries, of type <strong>User<\/strong> (if you\u2019re referring to single Entra users) or <strong>Group<\/strong> (when you\u2019re referring to Entra groups). You\u2019ll configure the value to refer to the Microsoft Entra user or group, for example:<\/p>\n<p style=\"padding-left: 40px; text-align: left;\"><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\">Access type:<\/span><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\"> grant<\/span><\/span><span class=\"LineBreakBlob BlobObject DragDrop SCXW188959082 BCX8\"><br class=\"SCXW188959082 BCX8\" \/><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\">Type:<\/span><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\"> group<\/span><\/span><span class=\"LineBreakBlob BlobObject DragDrop SCXW188959082 BCX8\"><br class=\"SCXW188959082 BCX8\" \/><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\">Value:<\/span><\/span><span class=\"TextRun SCXW188959082 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW188959082 BCX8\"> Management<\/span><\/span><\/p>\n<h2>Importing content available only to specific group of people from an external system without single sign-on with Microsoft 365<\/h2>\n<p>If you\u2019re importing content from a system that doesn\u2019t have single sign-on with Microsoft 365, you can still ensure that the imported content is properly secured and only available to the correct individuals. In such case, you\u2019ll define external groups which you\u2019ll use to secure the imported content. These groups reflect memberships defined in the external system but refer to Microsoft Entra users and groups or other external groups.<\/p>\n<p>For more information about working with external groups, review the <a href=\"https:\/\/learn.microsoft.com\/graph\/connecting-external-content-external-groups\">documentation<\/a>.<\/p>\n<h2>Keep your external permissions and access control lists synchronized<\/h2>\n<p>The external system from which you import content to Microsoft 365 contains the primary reference of permissions and who has access to what content. When building Microsoft Graph connectors, you must synchronize these permissions to your content imported to Microsoft 365 to ensure its security.<\/p>\n<p>If your external system raises an event when permissions change, you can immediately update them on the external content imported to Microsoft 365. If the external system doesn\u2019t support events, then you\u2019ll build a frequently running process that scans for changed permissions and updates them accordingly. You should include the ability to refresh permissions on demand, which will allow you to instantaneously refresh permissions if such a need arises.<\/p>\n<h2>Conclusion<\/h2>\n<p>Microsoft Graph connectors are a powerful and versatile way to centralize content in your organization on Microsoft 365 so that you can easily find and share information with your colleagues. When importing content, you must ensure that it\u2019s secured as defined in the external system. Microsoft Graph connectors offer you several flexible ways to define permissions on imported content to ensure that it\u2019s only accessible by privileged individuals. Once content is imported, it\u2019s protected by the same security and compliance policies that apply to Microsoft 365 data.<\/p>\n<p>To learn more about configuring permissions on content imported using Microsoft Graph connectors, see the <a href=\"https:\/\/learn.microsoft.com\/graph\/connecting-external-content-manage-items#access-control-list\">documentation<\/a>.<\/p>\n<p><a href=\"https:\/\/adoption.microsoft.com\/en-us\/sample-solution-gallery\/?keyword=&amp;sort-by=&amp;page=1&amp;product=Microsoft+Graph+connectors\">Try Graph connector samples<\/a> built by Microsoft and the Microsoft 365 community, to see what\u2019s possible.<\/p>\n<h2>More resources:<\/h2>\n<ul>\n<li>Visit our <a href=\"https:\/\/developer.microsoft.com\/en-us\/graph\/connectors\">Microsoft 365 Dev Center<\/a><\/li>\n<li>Follow us on <a href=\"https:\/\/twitter.com\/Microsoft365Dev\">Microsoft 365 Developer (@Microsoft365Dev) \/ X<\/a> for the latest news and announcements<\/li>\n<li>Check out demos and videos on <a href=\"https:\/\/www.youtube.com\/@Microsoft365Developer\">Microsoft 365 Developer &#8211; YouTube<\/a><\/li>\n<\/ul>\n<p>Happy coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to build an access control list (ACL) when importing content to Microsoft 365 using Microsoft Graph connectors.<\/p>\n","protected":false},"author":74222,"featured_media":16351,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3],"tags":[278,157],"class_list":["post-16310","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-graph","tag-access-control-list","tag-microsoft-graph-connectors"],"acf":[],"blog_post_summary":"<p>Learn how to build an access control list (ACL) when importing content to Microsoft 365 using Microsoft Graph connectors.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/16310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/74222"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=16310"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/16310\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/16351"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=16310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=16310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=16310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}