Exibir arquivos de usuário
Antes que um usuário possa baixar um arquivo, precisamos mostrar uma lista de arquivos disponíveis. Neste módulo, os arquivos estarão na raiz do OneDrive for Business do usuário. Talvez você queira descartar um ou dois arquivos para iniciar. Você pode acessar o OneDrive for Business navegando até https://www.office.com, entrando e selecionando o ícone do OneDrive.
Decidir quais permissões seu aplicativo requer
Todos os dados expostos pelo Microsoft Graph são protegidos e seu aplicativo deve ter as permissões adequadas concedidas para acessá-los. A permissão necessária depende do tipo de informação que seu aplicativo precisa acessar. Por exemplo, para acessar o calendário do usuário, seu aplicativo precisa ter a permissão Calendars.Read. Para ler os arquivos de um usuário, seu aplicativo precisa da permissão Files.Read. Posteriormente, quando for a hora de carregar arquivos, seu aplicativo precisará da permissão Files.ReadWrite. A lista exata das permissões necessárias para cada operação está disponível na referência da API do Microsoft Graph.
Se seu aplicativo carregar diferentes tipos de dados, os usuários deverão conceder a ele várias permissões necessárias para acessar essas informações. É recomendável que você solicite apenas as permissões necessárias para o aplicativo.
Especificar as permissões necessárias
A lista de permissões concedidas ao seu aplicativo é inserida diretamente no token de acesso. O padrão OAuth os chama de “escopos”. Quando a sua aplicação utiliza a MSAL para obter o token de acesso, tem de incluir uma lista de âmbitos no pedido para o ID do Microsoft Entra. Cada operação no Microsoft Graph tem sua própria lista de escopos. Se o token de acesso não tiver um deles, a solicitação será negada.
O aplicativo de exemplo armazena as permissões necessárias no arquivo appsettings.json em uma propriedade Scopes
como você viu anteriormente.
"Scopes": "user.read presence.read mailboxsettings.read files.readwrite"
O valor da propriedade Scopes
é usado pelo middleware ASP.NET Core do aplicativo, que manipula a recuperação de um token de acesso depois que o usuário entra com êxito.
Middleware: plataforma de identidade da Microsoft e Microsoft Graph
ASP.NET Core dá suporte a middleware que pode ser usado para autenticar e autorizar usuários. Ele também pode ser usado para recuperar um token que pode ser usado para chamar o Microsoft Graph, injetar um objeto do SDK do Microsoft Graph chamado GraphServiceClient
no aplicativo, criar um cache de token e muito mais. O middleware é configurado em Startup.cs e manipula as tarefas a seguir.
- Recupere as permissões necessárias definidas na propriedade
Scopes
de appsettings.json. - Adicione suporte para autenticação OpenId.
- Especifique que o aplicativo é um aplicativo Web da plataforma de identidade da Microsoft que requer um fluxo de código de autenticação.
- Adicione a capacidade de chamar APIs do Microsoft Graph com permissões específicas.
- Habilite a injeção de dependência do GraphServiceClient (um objeto fornecido pelo SDK do Microsoft Graph que é usado para fazer chamadas no Microsoft Graph).
- Adicione um cache de token na memória.
- Será necessário um usuário autenticado para acessar o aplicativo.
- Habilite suporte ao Razor Pages.
- Adicione páginas de interface do usuário do Microsoft Identity que forneçam suporte para entrada e saída do usuário.
Você pode ver cada uma dessas etapas no código a seguir definido no método ConfigureServices()
do Startup.cs.
// 1. Retrieve required permissions from appsettings
string[] initialScopes =
Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');
services
// 2. Add support for OpenId authentication
.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
// 3. Microsoft identity platform web app that requires an auth code flow
.AddMicrosoftIdentityWebApp(Configuration)
// 4. Add ability to call Microsoft Graph APIs with specific permissions
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
// 5. Enable dependency injection for GraphServiceClient
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
// 6. Add in-memory token cache
.AddInMemoryTokenCaches();
// 7. Require an authenticated user
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
services
// 8. Add Razor Pages support
.AddRazorPages()
// 9. Add Microsoft Identity UI pages that provide user
// sign-in and sign-out support
.AddMicrosoftIdentityUI();
Recuperar os arquivos no diretório raiz do OneDrive do usuário usando Microsoft Graph
Depois que o middleware necessário for configurado, o aplicativo manipulará automaticamente a entrada do usuário e a recuperação do token de acesso. O token de acesso pode ser usado para recuperar os arquivos de um usuário, já que conterá as permissões necessárias. Vamos examinar como esse processo funciona.
Para obter os arquivos de um usuário, use o recurso /me/drive/root/children
. É mais fácil obter os arquivos na pasta raiz do OneDrive do usuário atual, pois o Microsoft Graph fornece atalhos como /me
e /root
.
Para enumerar arquivos na pasta Documentos de outro usuário, você precisará da ID do usuário e da ID do item da pasta Documentos, conforme mostrado a seguir:
/users/{user-id}/drive/items/{item-id}/children
Dica
Microsoft Graph fornece acesso a arquivos no OneDrive, OneDrive for Business e SharePoint Online. O Microsoft Teams e outros Microsoft 365 serviços de armazenamento de arquivos no OneDrive for Business e no SharePoint Online. As operações de arquivo são as mesmas, mas os recursos (URLs) são um pouco diferentes para cada uma delas.
Para recuperar os arquivos do usuário conectados, o seguinte código pode ser usado:
var response = await _graphServiceClient.Me.Drive.Root.Children
.Request()
.GetAsync();
Deixe a chamada mais eficiente definindo as propriedades de dados específicas necessárias. A definição das propriedades é manipulada usando o método Select
. Observe que os métodos podem ser encadeados para facilitar a leitura da solicitação.
var response = await _graphServiceClient.Me.Drive.Root.Children
.Request()
.Select(file => new
{
file.Id,
file.Name,
file.Folder,
file.Package
})
.GetAsync();
O código a seguir pode ser usado para recuperar arquivos para um usuário diferente supondo que as permissões de segurança adequadas estão disponíveis:
var response = await _graphServiceClient
.Users[userId]
.Drive
.Items[itemId]
.Children
.Request()
.Select(file => new
{
file.Id,
file.Name,
file.Folder,
file.Package
})
.GetAsync();
Próximas etapas
Vamos colocar tudo o que você aprendeu para praticar e estender seu aplicativo para mostrar uma lista de arquivos na pasta raiz do usuário do OneDrive for Business.