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
我已经成功创建了一个 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