帐户与 azure AD 链接后如何从 alexa 获取 accesstoken
How to get the accesstoken from alexa after account linking with azure AD
我尝试将我的 Alexa AWS Lambda 函数 (node.js 6.10) 与 Azure Activ Directory 连接到我的 Azure-Cloud-API。在阅读了亚马逊的 documentation 和许多教程后,我现在有了一个有效的帐户链接。这意味着,我可以 link 我智能手机上的 Alexa-App 中的技能帐户。
我的自定义技能的帐户链接:
{数据来自我的 Azure 门户}
- 授权授予类型:授权码授予
- 授权 URI:{OAUTH 2.0 授权端点}
- 访问令牌 URI:{OAUTH 2.0 令牌端点}
- 客户端 ID:b9c6[...]bc60 {应用程序 ID}
- 客户端密码:{客户端密码}
- 客户端身份验证方案:请求正文中的凭据
- 范围:openid
- 域:空
- 重定向 URL:--> 在 Azure 门户中定义了允许的令牌受众和回复 URL
在我的 aws lambda 函数中,我从 alexa 获取了事件请求,就像文档中所说的那样,带有版本、会话、上下文、请求的属性...
我对文档的理解是,Azure-Cloud-API-请求所需的令牌应该在此处:session.user.accessToken
但是这个令牌看起来不像我需要的那个,在我的测试运行之后,我总是得到“未经授权”的回复。
令牌看起来像这样,长度为 1252 个字符:
AQABAAAAAADX8GCi6Js6SK82TsD2Pb7rqGN56iHT_YSxlSr1RAdXucGs0S3ykOaw0XZ1WnjJotqZAn9BH7agRbP0VQv2rnJuRw_aJil7 [...] JIEO2Ap4wuG-tTwiSmZBfbLhyYtwQmxLAkqiLApqFmBYcyu-dnzlVV4liDGyTQ7gAXufd3zt7QGmi3UfP1aL9f5NBeXbmxnU6FHRzF10QZa19pTQgNTtIK8oIAA
如果我配置 postman 并向 azure activ 目录发送请求,我会得到一个像这样的 accessToken(1168 个字符长):
eyJ0eXAiOiJKV1QiLCJhbGc [...] Ezbk5aY2VEYyJ9.eyJhdWQiOiJodHRwczovL21ldGVvcmEtYXBwLmF [...] kY5MWVUUXdBQSIsInZlciI6IjEuMCJ9.KJco47-FdJ_eeqv38LL [...] YK_4JqCRDw
这个看起来像一个 jwt-token,如果我直接在我的 aws lambda 函数中复制这个令牌并将这个用于 Azure-Cloud-API-Request,它就可以工作(直到令牌过期) .
现在不知道是不是我的账号配置有问题linking?或者我必须用 alexa 的令牌做些什么才能得到真正的令牌吗?还是真正的令牌在其他地方,我必须在那里获取它?
非常感谢您的帮助!
亚马逊文档“Alexa 技能套件”:
https://developer.amazon.com/docs/custom-skills/link-an-alexa-user-with-a-user-in-your-system.html
编辑(解决方案)11.06.2018
- 授权授予类型:授权代码授予
- 授权 URI:{OAUTH 2.0 授权端点} + ?resource= + {应用程序 ID}
- 访问令牌 URI:{OAUTH 2.0 令牌端点}
- 客户端 ID:b9c6[...]bc60 {应用程序 ID}
- 客户端密钥:{Client Secret} App>Settings>Keys new Key with expiration date = 2 years
- 客户端身份验证方案:请求正文中的凭据
- 范围:空
- 域:空
- 重定向 URL:--> 在 Azure 门户中定义了允许的令牌受众和回复 URL
听起来你还没有完成你的技能的帐户 linking 序列。设置帐户 linking 配置后,您需要打开 Alexa 应用程序(在您的 phone 或 https://alexa.amazon.com 上)并转到您的新技能和 link 您的帐户。一旦成功,您将在 request.Session.User.AccessToken
.
中获得一个令牌
- 您可以忽略有关 "front end" 应用程序注册的部分。
- 在 Alexa 帐户 linking 部分更新 URL 中使用 login.microsoftonline.com 而不是 login.windows.net
- ClientId 为 "back end" 应用程序注册的应用程序 ID
- 必须设置
?resource=
,并且必须与 JWT 承载选项的受众参数相同。如果您在 Visual Studio. 中使用 .Net Core 2.0 模板,则这是 ClientId
- 使用的客户端秘密(密钥)不能是"Never Expires"。使用 1 年或 2 年的期限。
除了 并在向授权 URI 添加 ?resource=
之后,我还必须授予 API 权限 Azure Active Directory Graph
> User.Read
在应用程序注册和 Grant Admin Consent
上。
如果没有此权限,帐户关联将引发错误。如果您遇到类似问题,请尝试使用 Postman 的 OAuth 值并检查 Postman 控制台是否有错误消息
我尝试将我的 Alexa AWS Lambda 函数 (node.js 6.10) 与 Azure Activ Directory 连接到我的 Azure-Cloud-API。在阅读了亚马逊的 documentation 和许多教程后,我现在有了一个有效的帐户链接。这意味着,我可以 link 我智能手机上的 Alexa-App 中的技能帐户。
我的自定义技能的帐户链接: {数据来自我的 Azure 门户}
- 授权授予类型:授权码授予
- 授权 URI:{OAUTH 2.0 授权端点}
- 访问令牌 URI:{OAUTH 2.0 令牌端点}
- 客户端 ID:b9c6[...]bc60 {应用程序 ID}
- 客户端密码:{客户端密码}
- 客户端身份验证方案:请求正文中的凭据
- 范围:openid
- 域:空
- 重定向 URL:--> 在 Azure 门户中定义了允许的令牌受众和回复 URL
在我的 aws lambda 函数中,我从 alexa 获取了事件请求,就像文档中所说的那样,带有版本、会话、上下文、请求的属性...
我对文档的理解是,Azure-Cloud-API-请求所需的令牌应该在此处:session.user.accessToken 但是这个令牌看起来不像我需要的那个,在我的测试运行之后,我总是得到“未经授权”的回复。 令牌看起来像这样,长度为 1252 个字符:
AQABAAAAAADX8GCi6Js6SK82TsD2Pb7rqGN56iHT_YSxlSr1RAdXucGs0S3ykOaw0XZ1WnjJotqZAn9BH7agRbP0VQv2rnJuRw_aJil7 [...] JIEO2Ap4wuG-tTwiSmZBfbLhyYtwQmxLAkqiLApqFmBYcyu-dnzlVV4liDGyTQ7gAXufd3zt7QGmi3UfP1aL9f5NBeXbmxnU6FHRzF10QZa19pTQgNTtIK8oIAA
如果我配置 postman 并向 azure activ 目录发送请求,我会得到一个像这样的 accessToken(1168 个字符长):
eyJ0eXAiOiJKV1QiLCJhbGc [...] Ezbk5aY2VEYyJ9.eyJhdWQiOiJodHRwczovL21ldGVvcmEtYXBwLmF [...] kY5MWVUUXdBQSIsInZlciI6IjEuMCJ9.KJco47-FdJ_eeqv38LL [...] YK_4JqCRDw
这个看起来像一个 jwt-token,如果我直接在我的 aws lambda 函数中复制这个令牌并将这个用于 Azure-Cloud-API-Request,它就可以工作(直到令牌过期) .
现在不知道是不是我的账号配置有问题linking?或者我必须用 alexa 的令牌做些什么才能得到真正的令牌吗?还是真正的令牌在其他地方,我必须在那里获取它?
非常感谢您的帮助!
亚马逊文档“Alexa 技能套件”:
https://developer.amazon.com/docs/custom-skills/link-an-alexa-user-with-a-user-in-your-system.html
编辑(解决方案)11.06.2018
- 授权授予类型:授权代码授予
- 授权 URI:{OAUTH 2.0 授权端点} + ?resource= + {应用程序 ID}
- 访问令牌 URI:{OAUTH 2.0 令牌端点}
- 客户端 ID:b9c6[...]bc60 {应用程序 ID}
- 客户端密钥:{Client Secret} App>Settings>Keys new Key with expiration date = 2 years
- 客户端身份验证方案:请求正文中的凭据
- 范围:空
- 域:空
- 重定向 URL:--> 在 Azure 门户中定义了允许的令牌受众和回复 URL
听起来你还没有完成你的技能的帐户 linking 序列。设置帐户 linking 配置后,您需要打开 Alexa 应用程序(在您的 phone 或 https://alexa.amazon.com 上)并转到您的新技能和 link 您的帐户。一旦成功,您将在 request.Session.User.AccessToken
.
- 您可以忽略有关 "front end" 应用程序注册的部分。
- 在 Alexa 帐户 linking 部分更新 URL 中使用 login.microsoftonline.com 而不是 login.windows.net
- ClientId 为 "back end" 应用程序注册的应用程序 ID
- 必须设置
?resource=
,并且必须与 JWT 承载选项的受众参数相同。如果您在 Visual Studio. 中使用 .Net Core 2.0 模板,则这是 ClientId
- 使用的客户端秘密(密钥)不能是"Never Expires"。使用 1 年或 2 年的期限。
除了 ?resource=
之后,我还必须授予 API 权限 Azure Active Directory Graph
> User.Read
在应用程序注册和 Grant Admin Consent
上。
如果没有此权限,帐户关联将引发错误。如果您遇到类似问题,请尝试使用 Postman 的 OAuth 值并检查 Postman 控制台是否有错误消息