使用Azure AD多租户openID身份验证获取访问令牌

时间:2015-08-24 15:38:52

标签: authentication azure azure-active-directory

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

0 个答案:

没有答案