当我尝试通过访问令牌获取用户信息时,出现以下错误。我的Angular应用程序具有以下流(调用Web API的Web API)
Angular 应用程序--〉传递授权代码--〉API(生成访问令牌)---〉图形API(用户api)
出现一个或多个错误。(OnBehalfOfCredential身份验证失败:AADSTS50013:Assert签名验证失败。[原因-找到密钥,但使用密钥验证签名失败。,客户端使用的密钥指纹:“F8 A23743 D9 CD 47 B6 D1 A1 FXXXXXXA 17 A9 B1 D919 EC”,找到密钥“开始时间= 2022年10月2日18:06:49,结束时间= 2027年10月2日18:06:49”]。跟踪ID:1d 326676-f8 a5 -4410-b4 cf-SSS 1a 9 b64800相关性识别码:79 ca 8aec-bb 73 - 48 f9-b 0 d2-XXXb 4226 e625时间戳:2023年3月10日10时22分27秒)
应用程序在Azure中具有以下范围
"openid", "profile", "User.Read.All"
var tenantId= "tenantid";
var clientId= "clientid";
var clientSecret = "secret";
// using Azure.Identity;
var options = new OnBehalfOfCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// This is the incoming token to exchange using on-behalf-of flow
var oboToken = accessToken;
var onBehalfOfCredential = new OnBehalfOfCredential(tenantId, clientId, clientSecret, oboToken, options);
GraphServiceClient graphClient = new GraphServiceClient(onBehalfOfCredential, scopes);
var result = graphClient.Users.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Count = true;
requestConfiguration.QueryParameters.Search = "\"displayName:rock\"";
requestConfiguration.QueryParameters.Orderby = new string[] { "displayName" };
requestConfiguration.QueryParameters.Select = new string[] { "id", "displayName", "mail" };
requestConfiguration.Headers.Add("ConsistencyLevel", "eventual");
}).Result;
1条答案
按热度按时间31moq8wy1#
我尝试通过Postman在我的环境中重现相同的错误,但得到了如下相同的错误:
如果在生成访问令牌时传递无效Assert,则通常会发生此错误。
要解决错误,请尝试以下方法:
作为示例,我创建了**
Server
**Azure AD应用程序并公开了API,添加了授权客户端应用程序:现在,在**
Client
**应用程序中,我添加了如下API权限:现在,我生成了访问令牌,以使用授权代码流传递Assert,如下所示:
现在,我使用scope作为
https://graph.microsoft.com/User.Read.All
,使用**on-behalf-of
**流生成访问令牌注意:要获取用户配置文件,**
aud
**应为https://graph.microsoft.com
。当我解码令牌时,**
aud
**是Microsoft Graph,如下所示:当我使用上面生成的访问令牌时,我能够成功获取用户配置文件如下所示:
您还可以在**
on-behalf-of
流中生成访问令牌时使用https://graph.microsoft.com/.default
**作用域。要解决此错误,请在代码中进行如下更改:
并确保生成访问令牌,以便将其作为具有适当范围的Assert传递。
参考资料:
Choose-authentication-providers.md 在主·微软图形· GitHub由andrueastman
GitHub Web API calling a downstream API on behalf of the user由尼哈-巴尔加瓦