【发布时间】:2015-11-18 02:42:03
【问题描述】:
我按照示例代码 here 创建了一个具有 Azure AD 多租户 OpenID 身份验证的 MVC Web 应用程序。我使用以下代码让用户登录。
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
现在我需要发送一个受 Azure AD 保护的 Web api 调用。目前,在我发送请求之前,我使用 ADAL 库要求用户再次登录并获取访问令牌,如下所示。
AuthenticationContext ac = new AuthenticationContext(authority);
AuthenticationResult ar = ac.AcquireToken(resourceID, clientID, redirectURI, PromptBehavior.Always);
string accessToken = ar.AccessToken;
但是,由于 MVC 中使用的身份验证(如果用户来自我的 AD)与用于保护 web api 的身份验证相同。我想知道是否有办法在用户使用此 openID 身份验证登录时获取访问令牌,以便我可以跳过 ADAL 的第二次登录?
更新: 按照 vibronet 的回答,我正在尝试使用以下代码来获取令牌:
string authority = "https://login.windows.net/ucdavisprojecthotmail.onmicrosoft.com";
ClientCredential clientcred = new ClientCredential(clientId, appKey);
AuthenticationContext authContext = new AuthenticationContext(authority);
AuthenticationResult result = authContext.AcquireTokenSilent(resourceID, clientcred, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
这里,此代码用于 MVC Web 应用程序,clienId 和 appKey 是我要调用的 Web API 的 clientID 和密钥。 resoureID 是在 Azure 门户中获取的 Web API 的 APP ID URI。
但是,我收到此错误:无法以静默方式获取令牌。调用方法 AcquireToken。有什么我遗漏的吗?
【问题讨论】:
标签: authentication azure azure-active-directory