我能夠成功檢索我的自定義身份驗證提供程序(開發人員身份驗證)的身份標記。這是使用Cognito devauth演示servlet實現的。AWS認證返回 - '登錄令牌無效。不是Cognito令牌'
此令牌返回給運行AWS JS SDK的瀏覽器。當我打電話給getCredentialsForIdentiy時,我收到'無效的登錄令牌'錯誤。
POST https://cognito-identity.us-west-2.amazonaws.com/ 400 (Bad Request)
app.js:150 Error: Invalid login token. Not a Cognito token.
at constructor.a (aws-sdk-2.58.0.min.js:41)
at constructor.callListeners (aws-sdk-2.58.0.min.js:41)
at constructor.emit (aws-sdk-2.58.0.min.js:41)
at constructor.emitEvent (aws-sdk-2.58.0.min.js:41)
at constructor.e (aws-sdk-2.58.0.min.js:41)
at i.runTo (aws-sdk-2.58.0.min.js:43)
at aws-sdk-2.58.0.min.js:43
at constructor.<anonymous> (aws-sdk-2.58.0.min.js:41)
at constructor.<anonymous> (aws-sdk-2.58.0.min.js:41)
at constructor.callListeners (aws-sdk-2.58.0.min.js:41) "NotAuthorizedException: Invalid login token. Not a Cognito token.
at constructor.a (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:615)
at constructor.callListeners (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30513)
at constructor.emit (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30224)
at constructor.emitEvent (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:16590)
at constructor.e (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:12285)
at i.runTo (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:43:7277)
at https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:43:7482
at constructor.<anonymous> (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:12495)
at constructor.<anonymous> (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:16645)
at constructor.callListeners (https://sdk.amazonaws.com/js/aws-sdk-2.58.0.min.js:41:30619)"
我傳遞給getCredentialsForIdentity以下參數。
identityId: <returned from servlet in region:guid format>
customRoleArn: <that maps to authenticated role>
Logins: <cognito-identity.amazonaws.com = token returned by congito>
我注意到,新的congnito身份是通過使用id瀏覽器創建的。所以,與servlet的令牌交互似乎是正確的。但令牌被拒絕。
我在這裏錯過了什麼?我如何進一步排除故障?
編輯: 瀏覽器客戶端:javascript sdk,版本2.58。 基本上寫一個JS客戶端到this demo。這些修改只是將令牌作爲登錄調用本身的一部分。生成的令牌對應於只有IOT客戶端訪問權限的角色。 (我想知道這個政策是否需要擴大)。最終用戶將通過內部ID存儲進行驗證,而不是此演示。
編輯2: 不是針對Cognito Service調用getCredentialsForIdentiy,而是針對STS調用了assumeRoleWithWebIdentity並且工作正常。使用基本流程而不是增強流程here.。真的不知道爲什麼增強流量不起作用,但現在將採取基本的流量方法。
您正在使用哪個SDK?你能否詳細說明你如何管理這個流程?你描述的內容聽起來很對,所以它應該是一些小事。 –
謝謝!增加了更多細節。 – user1452132