AAD API 基于角色的身份验证

AAD API Role Based Authentication

我已经成功创建了一个 Web API,它托管在 Azure 中并使用 AAD 不记名令牌身份验证进行保护,以允许客户端应用程序(目前只是我构建的测试控制台应用程序)访问它。

一项要求已经明确,最终客户端应用程序 (Sharepoint) 的用户将分为两个独立的组 - 其中一个组对 API 某些区域的访问将受到限制。

我的老板规定 API 应该处理所有身份验证,所以我需要换掉当前的 Azure Active Directory 承载身份验证中间件并将其替换为(我认为)Open Id Connect 身份验证。

我在整理解决方案时遇到了一些困难,因为我不太清楚 how/if 这是否可行。我一直在查看 the provided sample,但我不知道如何使用它。在示例中,用户直接登录到站点,但在我的设置中,他们没有登录到 API,他们登录到 Sharepoint,然后调用 - API 如何使用

[Authorize(Roles = "Admin")]

没有任何"logged in user"概念的属性。

要调用 api,您需要提供包含权限的访问令牌。

这是供您参考的代码片段。

// Because we signed-in already in the WebApp, the userObjectId is know
                string userObjectID = (User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;

                // Using ADAL.Net, get a bearer token to access the TodoListService
                AuthenticationContext authContext = new AuthenticationContext(AzureAdOptions.Settings.Authority, new NaiveSessionCache(userObjectID, HttpContext.Session));
                ClientCredential credential = new ClientCredential(AzureAdOptions.Settings.ClientId, AzureAdOptions.Settings.ClientSecret);
                result = await authContext.AcquireTokenSilentAsync(AzureAdOptions.Settings.TodoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));

                // Retrieve the user's To Do List.
                HttpClient client = new HttpClient();
                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, AzureAdOptions.Settings.TodoListBaseAddress + "/api/todolist");
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
                HttpResponseMessage response = await client.SendAsync(request);

参考:

Call a web API in an ASP.NET Core web app using Azure AD

How to: Add app roles in your application and receive them in the token

Using groups vs using application roles for authorization in Azure AD apps