我成功地将我的 Alexa 应用程序(客户端)链接到我们公司的 OpenID Connect 平台(授权服务器)。
我们的授权服务器向 Alexa 客户端返回以下信息:
{
"access_token":"eyAi",
"refresh_token":"kfQ",
"scope":"openid profile",
"id_token":"eyA",
"token_type":"Bearer",
"expires_in":3598
}
Alexa 客户端成功接收此信息,并在调用技能时将“access_token”传递给我们的代码。
所以总而言之,两个系统是链接的,alexa 正在向我们发送 access_token。到现在为止还挺好。
然而,问题是我们的平台需要“id_token”而不是“access_token”。所以我希望 Alexa 向我们发送 id_token。
我找不到有关如何实现这一目标的任何文档。请帮忙。
Here是一个链接到alexa下的账户链接
最佳答案
截至 2020 年 1 月也是如此。与流行相反convention
其中 accessToken 在授权请求 (OAuth) 中传递,Id token 用于身份验证 (OpenId)。
通过 Cognito 用户池登录时,我们会获得 ID token 、访问 token 和刷新 token 。 ID token 用于与 STS 和 Cognito 联合身份通信。
如果发送的是 accessToken 而不是 ID token ,则 API Gateway 授权方仅检查 ID token 会将请求视为未授权。
AWS 在此视频中解释了 Cognito 和联合身份之间的数据流:https://youtu.be/VZqG7HjT2AQ?t=528
当用户登录 Alexa 技能时,将 Alexa 与 Cognito 链接。
Alexa 记录来自所有其他 token 的 accessToken,并在后续请求中将其发送给 Cognito。
由于这些请求中没有 ID token ,它们会因 HTTP 401 而失败。
这是亚马逊服务之间的不和谐,希望他们制定解决方法。
一种解决方法是使用自定义授权方 lambda 并编写您自己的逻辑。
更好的方法是使用资源服务器向您的用户池添加一些自定义 OAuth 范围。然后添加OAuth Scopes
到您的 API Gateway 资源页面。
API Gateway 将检查 accessToken 并允许具有 API Gateway 资源中定义的 OAuth 范围的请求。
关于oauth-2.0 - Alexa 帐户链接 - 如何使用 id_token 而不是访问 id_token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47337662/