Esercizio - Garantire l'accesso sicuro con l'elenco di controllo di accesso

Completato

In questo esercizio si aggiorna il codice responsabile dell'importazione dei file markdown locali con la configurazione degli elenchi di controllo di accesso per gli elementi selezionati.

Prima di iniziare

Prima di eseguire questo esercizio, assicurarsi di completare l'esercizio precedente in questo modulo.

Importare contenuto disponibile per tutti gli utenti dell'organizzazione

Quando è stato implementato il codice per l'importazione di contenuto esterno nell'esercizio precedente, è stato configurato per essere disponibile per tutti gli utenti dell'organizzazione. Ecco il codice usato:

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
          }
      }
    };
  });
}

L'elenco di controllo di accesso è stato configurato per concedere l'accesso a tutti. È possibile modificarlo per le pagine markdown selezionate da importare.

Importare il contenuto disponibile per selezionare gli utenti

Configurare prima di tutto una delle pagine importate per essere accessibili solo a un utente specifico.

Nel Web browser:

  1. Passare al portale di Azure all'indirizzo https://portal.azure.com e accedere con l'account aziendale o dell'istituto di istruzione.

  2. Nella barra laterale selezionare Microsoft Entra ID.From the sidebar, select Microsoft Entra ID.

  3. Nel riquadro di spostamento selezionare Utenti.

  4. Nell'elenco degli utenti aprire uno degli utenti selezionando il nome.

  5. Copiare il valore della proprietà ID oggetto .

    Screenshot del portale di Azure con un profilo utente aperto.

Usare questo valore per definire un nuovo elenco di controllo di accesso per una pagina markdown specifica.

Nell'editor di codice:

  1. Aprire il file ContentService.cs e individuare il Transform metodo .

  2. All'interno del Select delegato definire l'ACL predefinito che si applica a tutti gli elementi importati:

    var acl = new Acl
    {
      Type = AclType.Everyone,
      Value = "everyone",
      AccessType = AccessType.Grant
    };
    
  3. Eseguire quindi l'override dell'elenco di controllo di accesso predefinito per il file markdown con il nome che termina con 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
      };
    }
    
  4. Aggiornare infine il codice che restituisce l'elemento esterno per usare l'ACL definito:

    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
      }
    };
    
  5. Il metodo aggiornato Transform ha l'aspetto seguente:

    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
          }
        };
      });
    }
    
  6. Salvare le modifiche.

Importare il contenuto disponibile per un gruppo selezionato

A questo punto, estendere il codice in modo che un'altra pagina sia accessibile solo da un gruppo selezionato di utenti.

Nel Web browser:

  1. Passare al portale di Azure all'indirizzo https://portal.azure.com e accedere con l'account aziendale o dell'istituto di istruzione.
  2. Nella barra laterale selezionare Microsoft Entra ID.From the sidebar, select Microsoft Entra ID.
  3. Nel riquadro di spostamento selezionare Gruppi.
  4. Nell'elenco dei gruppi aprire uno dei gruppi selezionando il relativo nome.
  5. Copiare il valore della proprietà Id oggetto .

Screenshot del portale di Azure con una pagina di gruppo aperta.

Usare questo valore per definire un nuovo elenco di controllo di accesso per una pagina markdown specifica.

Nell'editor di codice:

  1. Aprire il file ContentService.cs e individuare il Transform metodo

  2. Estendere la clausola definita if in precedenza, con una condizione aggiuntiva per definire l'ACL per il file markdown con il nome che termina con traverse-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
      };
    }
    
  3. Il metodo aggiornato Transform ha l'aspetto seguente:

    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
          }
        };
      });
    }
    
  4. Salvare le modifiche.

Applicare i nuovi ACL

Il passaggio finale consiste nell'applicare gli ACL appena configurati.

  1. Aprire un terminale e impostare la directory di lavoro sul progetto.
  2. Compilare il progetto eseguendo il dotnet build comando .
  3. Avviare il caricamento del contenuto eseguendo il dotnet run -- load-content comando .