Azure AD身份验证令牌使Web API授权失败

时间:2019-05-29 10:16:43

标签: c# azure azure-active-directory adal

我在Azure上有一个Web API,需要授权,并且我正在使用Azure AD对帐户进行身份验证并生成访问令牌。

我可以通过两种不同的方式通过ADAL成功地使用ADAL从Azure AD获取访问令牌,但是只有一个由Web-api授权,而另一个失败。

以下是对帐户进行交互身份验证,并且令牌已由网络API授权

result = AuthenticationContext.AcquireTokenAsync(resource, clientId, redirectUri, new PlatformParameters(PromptBehavior)).Result;

其中资源是web-api应用程序ID(guid)。

以下内容是使用给定的用户名和密码非交互地验证帐户,但令牌未得到网络api的授权

UserPasswordCredential cred = new UserPasswordCredential(userName, password);
result = AuthenticationContext.AcquireTokenAsync(resource, clientId, cred).Result; 

其中资源= https:// {tenant} / {api名称}。

web-api调用如下:

HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response = await httpClient.GetAsync(ApplicationCallUri);

两种方式都返回相同的AuthenticationResult对象(除了令牌和时间戳),我看不到为什么第二个对象授权失败。

web-api响应为“已拒绝此请求的授权。”

由于身份验证通过两种方式均成功,因此我认为它必须与Web API兼容。非常感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

感谢那些指出受众群体参数的学者,我意识到Web api被设置为仅期望两个受众群体值之一的令牌。我为承载身份验证添加了第二个选项,它适用于两种情况。

谢谢朱尼!