Ejercicio: Garantizar el acceso seguro con la lista de control de acceso
En este ejercicio, actualizará el código responsable de importar archivos markdowns locales con la configuración de ACL en elementos seleccionados.
Antes de empezar
Antes de realizar este ejercicio, asegúrese de completar el ejercicio anterior en este módulo.
Importación de contenido disponible para todos los usuarios de la organización
Cuando implementó el código para importar contenido externo en el ejercicio anterior, lo configuró para que esté disponible para todos los usuarios de la organización. Este es el código que usó:
static IEnumerable<ExternalItem> Transform(IEnumerable<DocsArticle> content)
{
var baseUrl = new Uri("https://learn.microsoft.com/graph/");
return content.Select(a =>
{
var docId = GetDocId(a.RelativePath ?? "");
return new ExternalItem
{
Id = docId,
Properties = new()
{
AdditionalData = new Dictionary<string, object> {
{ "title", a.Title ?? "" },
{ "description", a.Description ?? "" },
{ "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")).ToString() }
}
},
Content = new()
{
Value = a.Content ?? "",
Type = ExternalItemContentType.Html
},
Acl = new()
{
new()
{
Type = AclType.Everyone,
Value = "everyone",
AccessType = AccessType.Grant
}
}
};
});
}
Ha configurado la ACL para conceder acceso a todos los usuarios. Vamos a ajustarlo para las páginas de Markdown seleccionadas que va a importar.
Importación de contenido disponible para seleccionar usuarios
En primer lugar, configure una de las páginas que va a importar para que solo sea accesible para un usuario específico.
En el explorador web:
Vaya a Azure Portal en https://portal.azure.com e inicie sesión con su cuenta profesional o educativa.
En la barra lateral, seleccione Microsoft Entra ID.
En la navegación, seleccione Usuarios.
En la lista de usuarios, seleccione su nombre para abrir uno de los usuarios.
Copie el valor de la propiedad Id. de objeto .
Use este valor para definir una nueva ACL para una página de Markdown específica.
En el editor de código:
Abra el archivo ContentService.cs y busque el
Transform
método .Dentro del
Select
delegado, defina la ACL predeterminada que se aplica a todos los elementos importados:var acl = new Acl { Type = AclType.Everyone, Value = "everyone", AccessType = AccessType.Grant };
A continuación, invalide la ACL predeterminada para el archivo markdown con el nombre que termina en
use-the-api.md
:if (a.RelativePath!.EndsWith("use-the-api.md")) { acl = new() { Type = AclType.User, // AdeleV Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5", AccessType = AccessType.Grant }; }
Por último, actualice el código que devuelve el elemento externo para usar la ACL definida:
return new ExternalItem { Id = docId, Properties = new() { AdditionalData = new Dictionary<string, object> { { "title", a.Title ?? "" }, { "description", a.Description ?? "" }, { "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")). ToString() } } }, Content = new() { Value = a.Content ?? "", Type = ExternalItemContentType.Html }, Acl = new() { acl } };
El método actualizado
Transform
tiene el siguiente aspecto:static IEnumerable<ExternalItem> Transform(IEnumerable<DocsArticle> content) { var baseUrl = new Uri("https://learn.microsoft.com/graph/"); return content.Select(a => { var acl = new Acl { Type = AclType.Everyone, Value = "everyone", AccessType = AccessType.Grant }; if (a.RelativePath!.EndsWith("use-the-api.md")) { acl = new() { Type = AclType.User, // AdeleV Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5", AccessType = AccessType.Grant }; } var docId = GetDocId(a.RelativePath ?? ""); return new ExternalItem { Id = docId, Properties = new() { AdditionalData = new Dictionary<string, object> { { "title", a.Title ?? "" }, { "description", a.Description ?? "" }, { "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")). ToString() } } }, Content = new() { Value = a.Content ?? "", Type = ExternalItemContentType.Html }, Acl = new() { acl } }; }); }
Guarde los cambios.
Importación de contenido disponible para un grupo seleccionado
Ahora, ampliaremos el código para que un grupo de usuarios seleccionado solo pueda acceder a otra página.
En el explorador web:
- Vaya a Azure Portal en https://portal.azure.com e inicie sesión con su cuenta profesional o educativa.
- En la barra lateral, seleccione Microsoft Entra ID.
- En la navegación, seleccione Grupos.
- En la lista de grupos, abra uno de los grupos seleccionando su nombre.
- Copie el valor de la propiedad Object Id .
Use este valor para definir una nueva ACL para una página de Markdown específica.
En el editor de código:
Abra el archivo ContentService.cs y busque el
Transform
métodoAmplíe la cláusula definida
if
anteriormente, con una condición adicional para definir la ACL para el archivo markdown con el nombre que termina entraverse-the-graph.md
:if (a.RelativePath!.EndsWith("use-the-api.md")) { acl = new() { Type = AclType.User, // AdeleV Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5", AccessType = AccessType.Grant }; } else if (a.RelativePath.EndsWith("traverse-the-graph.md")) { acl = new() { Type = AclType.Group, // Sales and marketing Value = "a9fd282f-4634-4cba-9dd4-631a2ee83cd3", AccessType = AccessType.Grant }; }
El método actualizado
Transform
tiene el siguiente aspecto:static IEnumerable<ExternalItem> Transform(IEnumerable<DocsArticle> content) { var baseUrl = new Uri("https://learn.microsoft.com/graph/"); return content.Select(a => { var acl = new Acl { Type = AclType.Everyone, Value = "everyone", AccessType = AccessType.Grant }; if (a.RelativePath!.EndsWith("use-the-api.md")) { acl = new() { Type = AclType.User, // AdeleV Value = "6de8ec04-6376-4939-ab47-83a2c85ab5f5", AccessType = AccessType.Grant }; } else if (a.RelativePath.EndsWith("traverse-the-graph.md")) { acl = new() { Type = AclType.Group, // Sales and marketing Value = "a9fd282f-4634-4cba-9dd4-631a2ee83cd3", AccessType = AccessType.Grant }; } var docId = GetDocId(a.RelativePath ?? ""); return new ExternalItem { Id = docId, Properties = new() { AdditionalData = new Dictionary<string, object> { { "title", a.Title ?? "" }, { "description", a.Description ?? "" }, { "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")).ToString() } } }, Content = new() { Value = a.Content ?? "", Type = ExternalItemContentType.Html }, Acl = new() { acl } }; }); }
Guarde los cambios.
Aplicar las nuevas ACL
El último paso es aplicar las ACL recién configuradas.
- Abra un terminal y cambie el directorio de trabajo al proyecto.
- Compile el proyecto mediante la ejecución del
dotnet build
comando . - Empiece a cargar el contenido ejecutando el
dotnet run -- load-content
comando .