我成功地将我的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
下的帐户关联的链接答案 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发送查询