我在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兼容。非常感谢您的帮助。谢谢。
答案 0 :(得分:0)
感谢那些指出受众群体参数的学者,我意识到Web api被设置为仅期望两个受众群体值之一的令牌。我为承载身份验证添加了第二个选项,它适用于两种情况。
谢谢朱尼!