OpenIdConnect 是唯一在 Azure Active Directory 中实现授权的中间件吗
Is OpenIdConnect the only middleware that implements authorization in Azure Active Directory
我们正在尝试使用 Azure Active Directory 为我们的网站设置身份验证和授权。
我们开始使用 WS-Federation OWIN 中间件进行身份验证,它运行良好(根据 this sample)。
然后我们尝试插入授权并卡住了 - Azure 活动目录中基于角色和组的设置需要如下内容:
AuthorizationCodeReceived = context =>
{
// Get Access Token for User's Directory
string userObjectId = context.AuthenticationTicket.Identity.FindFirst(Globals.ObjectIdClaimType).Value;
string tenantId = context.AuthenticationTicket.Identity.FindFirst(Globals.TenantIdClaimType).Value;
ClientCredential credential = new ClientCredential(ConfigHelper.ClientId, ConfigHelper.AppKey);
AuthenticationContext authContext = new AuthenticationContext(
String.Format(CultureInfo.InvariantCulture, ConfigHelper.AadInstance, tenantId),
new TokenDbCache(userObjectId));
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
context.Code,
new Uri(
string.Format(
URI_MANGLER,
HttpContext.Current.Request.Url.Scheme,
HttpContext.Current.Request.Url.Authority,
System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath)),
credential,
ConfigHelper.GraphResourceId);
return Task.FromResult(0);
}
使用 WS-Federation,上下文中没有 "Code" 字段这样的东西。
在 AAD 中设置租户,添加应用程序并更新清单以具有几个角色。用户被分配到应用程序并被赋予特定角色。
因此,我们反过来将所有内容都移至 OpenId,但问题是:这是处理此类要求的最愚蠢的方法吗?
即使使用 WS-Federation,您也绝对可以获得角色并针对 [Authorize] 使用它们。只需按照 https://github.com/AzureADSamples/WebApp-RoleClaims-DotNet for turning on role creation and emission for the app in azure AD. Furthermore, you have to ensure that the claim of type http://schemas.microsoft.com/ws/2008/06/identity/claims/role 的自述文件中的说明作为您应用中的角色类型即可。无论如何,这应该是默认设置。
我们正在尝试使用 Azure Active Directory 为我们的网站设置身份验证和授权。
我们开始使用 WS-Federation OWIN 中间件进行身份验证,它运行良好(根据 this sample)。
然后我们尝试插入授权并卡住了 - Azure 活动目录中基于角色和组的设置需要如下内容:
AuthorizationCodeReceived = context =>
{
// Get Access Token for User's Directory
string userObjectId = context.AuthenticationTicket.Identity.FindFirst(Globals.ObjectIdClaimType).Value;
string tenantId = context.AuthenticationTicket.Identity.FindFirst(Globals.TenantIdClaimType).Value;
ClientCredential credential = new ClientCredential(ConfigHelper.ClientId, ConfigHelper.AppKey);
AuthenticationContext authContext = new AuthenticationContext(
String.Format(CultureInfo.InvariantCulture, ConfigHelper.AadInstance, tenantId),
new TokenDbCache(userObjectId));
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
context.Code,
new Uri(
string.Format(
URI_MANGLER,
HttpContext.Current.Request.Url.Scheme,
HttpContext.Current.Request.Url.Authority,
System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath)),
credential,
ConfigHelper.GraphResourceId);
return Task.FromResult(0);
}
使用 WS-Federation,上下文中没有 "Code" 字段这样的东西。
在 AAD 中设置租户,添加应用程序并更新清单以具有几个角色。用户被分配到应用程序并被赋予特定角色。
因此,我们反过来将所有内容都移至 OpenId,但问题是:这是处理此类要求的最愚蠢的方法吗?
即使使用 WS-Federation,您也绝对可以获得角色并针对 [Authorize] 使用它们。只需按照 https://github.com/AzureADSamples/WebApp-RoleClaims-DotNet for turning on role creation and emission for the app in azure AD. Furthermore, you have to ensure that the claim of type http://schemas.microsoft.com/ws/2008/06/identity/claims/role 的自述文件中的说明作为您应用中的角色类型即可。无论如何,这应该是默认设置。