Oauth 2.0 Alexa技能激活API中的重定向uri是什么?
背景 我正在实现Alexa的流程,我被困在第6步——使用Alexa的流程启用技能 具体来说,我不确定向Oauth 2.0 Alexa技能激活API中的重定向uri是什么?,oauth-2.0,alexa,alexa-account-linking,Oauth 2.0,Alexa,Alexa Account Linking,背景 我正在实现Alexa的流程,我被困在第6步——使用Alexa的流程启用技能 具体来说,我不确定向redirect\u uriPOST字段提供什么值。文件中提供了以下说明: 授权请求中包含的redirect_uri参数到OAuth 2.0服务器以获取用户的授权代码。这使Amazon能够从令牌服务器检索访问令牌。此URL对Amazon必须是不透明的 我的理解是Alexa想用现有的授权代码交换访问令牌,但我不知道Alexa是如何“秘密”完成这一任务的,我目前的方法抛出了一个400错误 错误消息
redirect\u uri
POST字段提供什么值。文件中提供了以下说明:
授权请求中包含的redirect_uri参数到OAuth 2.0服务器以获取用户的授权代码。这使Amazon能够从令牌服务器检索访问令牌。此URL对Amazon必须是不透明的
我的理解是Alexa想用现有的授权代码交换访问令牌,但我不知道Alexa是如何“秘密”完成这一任务的,我目前的方法抛出了一个400错误
错误消息
[status] 400
[response] {"message":"Could not contact provider of account linking credentials"}
注释
- 我的应用程序使用Firebase身份验证,并通过与Google和Facebook的联合登录为用户创建帐户。因此,Google和Facebook重定向回我的原生应用程序(React native)
- 我没有一个普遍的联系;相反,在我的账户链接流中, Alexa应用程序将用户重定向到一个html页面,该页面使用自定义模式重定向到我的应用程序
- 当用户从Alexa登录到我的应用程序时,Alexa会将他们从我的登录页面重定向回Alexa应用程序。在本例中,Alexa universal链接是重定向url
- 当用户从我的应用程序登录Alexa时(应用程序到应用程序链接),Alexa应用程序会将他们重定向到我的应用程序。我的应用是重定向url
async enableSkill(){
试一试{
let response=等待获取(`https://api.amazonalexa.com/v1/users/~current/skills/${this.skillId}/enablement`{
方法:“POST”,
标题:{
'Authorization':`Bearer${this.alexaAccessToken}`,
“内容类型”:“应用程序/json”
},
正文:JSON.stringify({
阶段:'开发',//或现场
accountLinkRequest:{
redirectUri:Linking.makeUrl(),//我认为不可能同时使用不同的OAuth服务器,如Google和Facebook。我不确定是否可以使用firebase作为OAuth服务器
在技能的“帐户链接”选项卡中,必须输入要使用的OAuth服务器的详细信息,并且必须在accountLinkRequest中输入用于OAuth登录此服务器的重定向URI
当您拥有自己的OAuth服务器时,请确保它在端口443上运行。我花了好几个小时才发现它与我的Node.js后端使用的端口3000不兼容。我也遇到了同样的情况,您能否帮我提供一个指南,让我设置oautj端点以共享alexa docs中定义的用户授权代码?
async enableSkill() {
try {
let response = await fetch(`https://api.amazonalexa.com/v1/users/~current/skills/${this.skillId}/enablement`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${this.alexaAccessToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
stage: 'development', // or live
accountLinkRequest: {
redirectUri: Linking.makeUrl(), // <--- unsure
authCode: this.myAppAuthCode, // <-- auth code from my system, not Alexa's
type: "AUTH_CODE"
}
})
});
return response.json();
} catch (err) {
throw new Error(err);
}
}