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 的自述文件中的说明作为您应用中的角色类型即可。无论如何,这应该是默认设置。