oauth-2.0 - Alexa 帐户链接 - 如何使用 id_token 而不是访问 id_token

标签 oauth-2.0 alexa alexa-skills-kit openid-connect

我成功地将我的 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/

相关文章:

node.js - 将身份验证提供程序添加到 Azure 移动服务 Nodejs 后端

oauth - 如何验证资源服务器的 OAuth 2.0 访问 token ?

node.js - 在 Alexa 技能响应中等待/继续

python - 保护 Django OAuth 工具包 View

javascript - Amazon Echo 按命令播放音乐

oauth-2.0 - Keycloak -- OAuth2 -- 同意页面

python - Instagram 和 oAuth

javascript - 这里有什么问题吗?在 Alexa 中获取亚马逊用户的电子邮件

alexa-skills-kit - 如何在 Alexa 中对用户询问的 "unhandled intent"进行错误处理?

aws-lambda - 如何检测用户何时结束与 Alexa 的交互?