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

问题描述:

我有一个应用程序,我们将其命名为'Apple',它在Azure AD上注册并拥有Azure Management API应用程序的委派权限。当被请求这个应用程序时,它会创建天蓝色的资源。存储帐户自动和这工作正常。应用程序之间的Azure AD身份验证

我有另一个应用程序是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应用程序。

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和密钥来验证令牌。

所以我的问题是,苹果应用总是返回401未授权代码

+0

虽然我没有收到任何回复,我应该更换标签,建议吗? –

+0

我在[这里]关注此主题(https://social.msdn.microsoft.com/Forums/azure/en-US/af1f1ddc-649b-4b35-9e16-ced582380e6c/azure-ad-authentication-between-applications ?forum = WindowsAzureAD),请让我知道你是否有任何问题。 –

+0

@费雪,谢谢你再次捕捉到我......我回复了你的回答... –

上述之外,问题的答案是,在第二令牌的确认过程中的资源ID(令牌请求期间)和目标对象ID(应用程序)不匹配。保持这些解决了问题。

然后,我遇到了另一个问题,这是我所描述here

看来,如果我有新的Azure的门户网站(目前还处于预览版)工作,AD token不包括JWT令牌"Roles"场。如果我在旧门户中按照相同的步骤配置应用程序,则AD在JWT令牌和场景中包含"Roles"字段,并按预期执行。

我应该避免至少使用Azure新的入口预览功能!