应用程序之间的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未授权代码
答
上述之外,问题的答案是,在第二令牌的确认过程中的资源ID(令牌请求期间)和目标对象ID(应用程序)不匹配。保持这些解决了问题。
然后,我遇到了另一个问题,这是我所描述here
看来,如果我有新的Azure的门户网站(目前还处于预览版)工作,AD token
不包括JWT
令牌"Roles"
场。如果我在旧门户中按照相同的步骤配置应用程序,则AD在JWT
令牌和场景中包含"Roles"
字段,并按预期执行。
我应该避免至少使用Azure新的入口预览功能!
虽然我没有收到任何回复,我应该更换标签,建议吗? –
我在[这里]关注此主题(https://social.msdn.microsoft.com/Forums/azure/en-US/af1f1ddc-649b-4b35-9e16-ced582380e6c/azure-ad-authentication-between-applications ?forum = WindowsAzureAD),请让我知道你是否有任何问题。 –
@费雪,谢谢你再次捕捉到我......我回复了你的回答... –