簡體   English   中英

賬號關聯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。 在閱讀了亞馬遜的文檔和許多教程后,我現在有了一個有效的帳戶鏈接。 這意味着,我可以在智能手機上的 Alexa 應用程序中鏈接技能帳戶。

我的自定義技能的 AccountLinking:{來自我的 azure 門戶的數據}

  • 授權授權類型:授權碼授權
  • 授權 URI:{OAUTH 2.0 AUTHORIZATION ENDPOINT}
  • 訪問令牌 URI:{OAUTH 2.0 TOKEN ENDPOINT}
  • 客戶端 ID:b9c6[...]bc60 {應用程序 ID}
  • 客戶端密碼:{客戶端密碼}
  • 客戶端身份驗證方案:請求正文中的憑據
  • 范圍:openid
  • 域:空
  • 重定向 URL:--> 在 Azure 門戶中定義為 ALLOWED TOKEN AUDIENCES 和 Reply URLs

在我的 aws lambda 函數中,我從 alexa 獲取事件請求,就像文檔所說的一樣,其中包含版本、會話、上下文、請求的屬性...

我對文檔的理解是,Azure-Cloud-API-Request 我需要的令牌應該在這里: session.user.accessToken 但是這個令牌看起來不像我需要的,在我的測試運行后我總是得到“未經授權”回來。 令牌看起來像這樣,長度為 1252 個字符:

AQABAAAAAADX8GCi6Js6SK82TsD2Pb7rqGN56iHT_YSxlSr1RAdXucGs0S3ykOaw0XZ1WnjJotqZAn9BH7agRbP0VQv2rnJuRw_aJil7 [...] JIEO2Ap4wuG-tTwiSmZBfbLhyYtwQmxLAkqiLApqFmBYcyu-dnzlVV4liDGyTQ7gAXufd3zt7QGmi3UfP1aL9f5NBeXbmxnU6FHRzF10QZa19pTQgNTtIK8oIAA

如果我配置 postman 並向 azure activ 目錄發送請求,我會得到一個這樣的 accessToken(1168 個字符長):

eyJ0eXAiOiJKV1QiLCJhbGc [...] Ezbk5aY2VEYyJ9.eyJhdWQiOiJodHRwczovL21ldGVvcmEtYXBwLmF [...] ky5MWVUUXdBQSIsInZlciI6IjEuJL4QD...

這個看起來像一個 jwt-token,如果我直接在我的 aws lambda 函數中復制這個令牌並將這個用於 Azure-Cloud-API-Request 它可以工作(直到令牌過期)。

現在我不確定我的帳戶鏈接配置是否有問題? 或者我必須對 alexa 的令牌做些什么才能得到真正的令牌? 或者真正的代幣在其他地方,我必須到那里去拿?

非常感謝您的幫助!

亞馬遜文檔“Alexa Skills Kit”:

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 AUTHORIZATION ENDPOINT} + ?resource= + {Application ID}
  • 訪問令牌 URI:{OAUTH 2.0 TOKEN ENDPOINT}
  • 客戶端 ID:b9c6[...]bc60 {應用程序 ID}
  • 客戶端密鑰:{Client Secret} App>Settings>Keys new Key,有效期為 2 年
  • 客戶端身份驗證方案:請求正文中的憑據
  • 范圍:空
  • 域:空
  • 重定向 URL:--> 在 Azure 門戶中定義為 ALLOWED TOKEN AUDIENCES 和 Reply URLs

聽起來您尚未完成技能的帳戶關聯序列。 設置帳戶鏈接配置后,您需要打開 Alexa 應用程序(在您的手機或https://alexa.amazon.com 上)並轉到您的新技能並鏈接您的帳戶。 一旦成功,您將在request.Session.User.AccessToken獲得一個令牌。

博文: https : //blogs.msdn.microsoft.com/premier_developer/2017/12/09/amazon-alexa-skills-authenticated-by-azure-active-directory-and-backed-by-asp-net- core-2-0-web-api-hosted-on-azure/需要更新如下:

  • 您可以忽略有關“前端”應用程序注冊的部分。
  • 在 Alexa 帳戶鏈接部分更新 URL 以使用 login.microsoftonline.com 而不是 login.windows.net
  • ClientId 是“后端”應用注冊的應用 ID
  • ?resource=必須設置,並且必須與 JWT 承載選項的受眾參數相同。 如果您在 Visual Studio 中使用 .Net Core 2.0 模板,則這是 ClientId。
  • 使用的客戶端密鑰(密鑰)不能是“永不過期”的密鑰。 使用 1 年或 2 年的持續時間。

除了Nate 的回答並在將?resource=到授權 URI 之后,我還必須在應用注冊上Grant Admin Consent API 權限Azure Active Directory Graph > User.ReadGrant Admin Consent

如果沒有此權限,帳戶鏈接將引發錯誤。 如果您遇到類似問題,請使用 Postman 嘗試您的 OAuth 值並檢查 Postman Console 以獲取錯誤消息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM