首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代表令牌问题(AADSTS50013:断言包含无效签名)

代表令牌问题(AADSTS50013:断言包含无效签名)
EN

Stack Overflow用户
提问于 2019-01-02 15:21:14
回答 2查看 4.8K关注 0票数 2

当我试图使用Cortana用户令牌(这是一个图形令牌)生成一个“代理”令牌到另一个使用ClientAssertionCertificate / ClientCredential的消费Web应用程序时,我会收到一个错误(在下面提到),方法是将它的AppId作为ResourceId传递给通过使用Cortana用户令牌生成的userAssertion

当检查我们的Bot设置时,它与其他消费Web API (API B)一起配置为有效的应用程序以及。我们是否需要在AAD中做任何额外的设置来获得这个代币?

代码语言:javascript
运行
复制
AADSTS50013: Assertion contains an invalid signature. 
[Reason - The provided signature value did not match the expected signature value., 
    Thumbprint of key used by client: '9DB0B05B5D70DD7901FB151A5F029148B8CC1C64', 
    Found key 'Start=11/11/2018 00:00:00, 
    End=11/11/2020 00:00:00'
]
Trace ID: a440869f-b8f5-4d87-ba1a-6bd8dd7ba200
Correlation ID: 651e1fa8-2069-4489-a687-e68e5206e193
Timestamp: 2019-01-02 07:14:45Z

下面是我们试图为其他消费的Web (API B)获取代理令牌的流程和示例代码。

流动步骤:

  1. Cortana要求用户登录。
  2. 用户登录到Cortana
  3. Cortana向Microsoft发送此用户令牌(生成的目标是使用https://graph.microsoft.com作为受众)
  4. 验证并希望使用此令牌来调用其他Web (称为API B)。
  5. 由于这个Cortana用户令牌不能直接使用,因此需要从代表API B生成令牌。
  6. 下面是用于代表生成令牌的代码示例: 公共异步任务GetOnBehalfOfTokenAsync(字符串权限、字符串资源、字符串范围= "“、字符串令牌= "") { AuthenticationResult输出;var clientId =GetOnBehalfOfTokenAsync/ Read证书可用于使用ClientAssertionCertificate // GetCert()将令牌发送到API B,用于根据Web.config文件中配置的拇指打印获取证书。var证书= this.GetCert();//‘https://login.microsoftonline.com/{tenant’是https://login.microsoftonline.com/{tenant id} var authContext =新的AuthenticationContext(权威);var cllientCertificateCredential =新的ClientAssertionCertificate(clientId,证书);//‘令牌’是从Cortana接收的用户令牌。变量userAssertion =(!string.IsNullOrWhiteSpace(令牌))?新的"urn:ietf:params:oauth:grant-type:jwt-bearer",(UserAssertion,TokenHelper.ExtractUserInfoFromAuthToken(token,“upn”):null;尝试{ //‘资源’是API B //如果UserAssertion为空的资源Id,那么使用UserAssertion和ClientAssertionCertificate if (userAssertion == null) { output =等待authContext .AcquireTokenAsync(资源,cllientCertificateCredential) .ConfigureAwait(False)获取令牌;{ output =等待authContext .AcquireTokenAsync(资源,cllientCertificateCredential,userAssertion) .ConfigureAwait(false);} catch (异常ex) {logger.log(“错误获取AAD身份验证令牌”,ex);}返回output.AccessToken};
  7. 获得上述异常,在此步骤中: 输出=等待authContext .AcquireTokenAsync(资源,cllientCertificateCredential,userAssertion) .ConfigureAwait(false);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-17 14:12:46

我们可以通过将依赖的自定义API (API B) "user_impersonation“范围配置到Bot的Cortana通道配置来解决这个问题。随着配置的改变,我们不需要代表我们的Microsoft应用程序为API B生成令牌。

感谢所有支持为这个线程提供解决方案的人。

票数 1
EN

Stack Overflow用户

发布于 2019-01-11 10:29:07

我的理解是:首先从Cortana访问ms图形API获得用户令牌;然后使用用户令牌在Microsoft Bot Framework API中生成OBO令牌;最后,您希望使用OBO令牌从Microsoft Bot Framework API访问API B。

您希望在中获得OBO令牌,您应该使用API id和秘密,为此,我从未尝试过这样做。

在我这边,我使用v1端点,我创建了两个API (API和B),我的流程是:首先,我的应用程序请求API A的token1;

接下来,使用token1从API A为API B请求token2;

最后,使用OBO token2从API B为aad图形API请求OBO token3。

有关v1端点中的OBO,请阅读link1

有关v2端点中的OBO,请阅读link2

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54008866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档