Alexa帐户关联 - 如何id_token而不是访问id_token

时间:2017-11-16 19:31:03

标签: oauth-2.0 alexa alexa-skills-kit oidc

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

下的帐户关联的链接

3 个答案:

答案 0 :(得分:2)

截至2020年1月也是如此。这与流行的convention相反,在流行的OAuth Scopes中,accessToken在授权请求(OAuth)中传递,而ID令牌用于身份验证(OpenId)。

在通过Cognito用户池登录时,我们被分配了ID令牌,访问令牌和刷新令牌。 ID令牌用于与STS和Cognito联合身份进行通信。 如果发送了accessToken而不是ID令牌,API网关授权者仅检查ID令牌是否会将请求视为未授权。 AWS在此视频中解释了Cognito和联合身份之间的数据流:https://youtu.be/VZqG7HjT2AQ?t=528

当用户登录Alexa技能时,将Alexa与Cognito链接。 Alexa记录所有其他令牌中的accessToken并将其在后续请求中发送给Cognito。

在这些请求中没有ID令牌的情况下,它们将失败,并显示HTTP 401。 这是亚马逊的服务之间的矛盾,希望它们能解决该问题。

一种解决方法是使用自定义授权者lambda并编写自己的逻辑。

一种更好的方法是使用资源服务器向您的用户池添加一些自定义OAuth范围。然后将UITextfield添加到您的API网关资源页面。

API网关将检查accessToken并允许使用API​​网关资源中定义的OAuth范围的请求。

答案 1 :(得分:0)

我在将alexa帐户与cognito用户池链接时遇到了这个问题。以前,我使用默认的Cognito用户池身份验证器来授权api网关。相反,我将其更改为自定义授权者。您可以在这里阅读有关内容-https://aws.amazon.com/blogs/compute/introducing-custom-authorizers-in-amazon-api-gateway/

此外,我们使用idtoken获取用户信息,相反,我们使用GetUser API从accesstoken获取用户信息。您可以在此处查看文档-https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html

答案 2 :(得分:0)

我使用了亚马逊的cognito,在我的情况下,我仅使用auth2配置了cognito,并以此禁用了openid,我得到了cognito来给我访问令牌和刷新令牌。然后,我不得不接触asp.net核心,因为它没有获取访问令牌(ValidateAudience = false)。邮递员帮助我确定为什么asp.net拒绝令牌,因为它向我的resfull api发送查询