我按照示例代码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。我错过了什么?