繁体   English   中英

应用程序之间的Azure AD身份验证

[英]Azure AD authentication between applications

我有一个名为“ Apple”的应用程序,该应用程序已在Azure AD中注册,并具有Azure Management API应用程序的委派权限。 当请求此应用程序时,它将创建一个Azure资源ex。 自动存储帐户,可以正常运行。

我还有另一个应用程序,它是MVC应用程序,它也已向同一AD租户注册。 第二个应用程序使用以下代码来检索访问令牌:

 var clientCredentials = new ClientCredential(ConfigurationManager.AppSettings["AD_ClientID"], ConfigurationManager.AppSettings["AD_Client_AccessKey"]);
 var authContext = new AuthenticationContext(string.Format(ConfigurationManager.AppSettings["AD_Tenant_Login_Url"], ConfigurationManager.AppSettings["AD_Tenant_Id"]));            
 var result = authContext.AcquireTokenAsync(ConfigurationManager.AppSettings["AD_Resource"], clientCredentials);
 if (result == null)
 {
     throw new InvalidOperationException("Could not get the token");
 }
 return result.Result;

结果是具有不同属性的访问令牌。 现在是第二个应用程序,检索具有访问资源Apple的访问令牌,然后将其传递到授权标头中的Apple应用程序。

Authorization:bearer TokenString

Apple应用程序已将Authorize属性添加到控制器。 该应用程序使用Owin和oauth应用程序配置,并带有以下代码

public void ConfigureAuth(IAppBuilder app)
    {
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                TokenValidationParameters = new TokenValidationParameters
                {

                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                },
            });
    }

请注意,访问令牌是使用其自己的AppId和密钥从第二个应用程序检索的; 而其他(Apple)应用程序使用其自己的AppId和密钥来验证令牌。

所以我的问题是, APPLE应用程序总是返回401不授权代码

对于以上问题,答案是资源ID(在令牌请求期间)和受众ID(在第二个应用程序中的令牌验证期间)不匹配。 保持相同即可解决问题。

然后我遇到了另一个问题,我已经在这里描述

看来,如果我使用较新的Azure门户(仍处于预览版本),则AD tokenJWT令牌中不包括"Roles"字段。 如果我在Older Portal中按照相同的步骤配置应用程序,则AD在JWT令牌中包含"Roles"字段,并且场景按预期执行。

我至少应避免将Azure新门户用于预览功能!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM