C# Azure AD身份验证令牌无法通过web api授权

C# Azure AD身份验证令牌无法通过web api授权,c#,azure,azure-active-directory,adal,C#,Azure,Azure Active Directory,Adal,我在Azure上有一个需要授权的web api,我正在使用Azure AD验证帐户并生成访问令牌 我可以通过两种不同的方式从Azure AD和ADAL中为同一帐户成功获取访问令牌,但其中只有一种通过web api授权,另一种失败 下面以交互方式对帐户进行身份验证,令牌由web api授权 result = AuthenticationContext.AcquireTokenAsync(resource, clientId, redirectUri, new PlatformParameters(

我在Azure上有一个需要授权的web api,我正在使用Azure AD验证帐户并生成访问令牌

我可以通过两种不同的方式从Azure AD和ADAL中为同一帐户成功获取访问令牌,但其中只有一种通过web api授权,另一种失败

下面以交互方式对帐户进行身份验证,令牌由web api授权

result = AuthenticationContext.AcquireTokenAsync(resource, clientId, redirectUri, new PlatformParameters(PromptBehavior)).Result;
其中资源是web api应用程序id guid

下面是使用给定用户名和密码以非交互方式对帐户进行身份验证,但该令牌未经web api授权

UserPasswordCredential cred = new UserPasswordCredential(userName, password);
result = AuthenticationContext.AcquireTokenAsync(resource, clientId, cred).Result; 
其中resource=https://{tenant}/{api name}

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方面的问题。非常感谢你的帮助。谢谢。

感谢juunas指出了受众参数,我意识到web api设置为仅为两个受众值中的一个值使用令牌。我为承载身份验证添加了第二个选项,它适用于两种情况


谢谢朱纳斯

检查令牌和索赔受众。它需要是为API配置的有效访问群体之一。这就是资源所定义的。此外,如果可能的话,我也不会亲自处理用户密码。例如,如果用户有MFA,它将无法工作。第二种情况下失败的资源是web api的应用程序ID URI。其中的任何其他值都会使身份验证过程失败。