2016-04-06 172 views
1

我正在使用aws lambdas,dynamodb和cognito構建認證系統。如何驗證getOpenIdTokenForDeveloperIdentity認證令牌

我一直在比較從getOpenIdTokenForDeveloperIdentity()提供的令牌;與服務器中的一個人呼叫特定身份。

我得到令牌和身份有:

function getToken(email, fn) { 
    var param = { 
     IdentityPoolId: cognitoIdentityPoolId, 
     Logins: {} // To have provider name in a variable 
    }; 
    param.Logins[cognitoDeveloperProvidedName] = email; 
    cognitoidentity.getOpenIdTokenForDeveloperIdentity(param, 
     function(err, data) { 
      if (err) return fn(err); // an error occurred 
      else fn(null, data.IdentityId, data.Token); // successful response 
     }); 
} 

話,據我瞭解,我可以得到cognito已經生成的令牌(不是新建一個)是這樣的:

function checkToken(IdentityId, email, fn){ 
    var param = { 
     IdentityPoolId: cognitoIdentityPoolId, 
     IdentityId: IdentityId, 
     Logins: {} 
    }; 
    param.Logins[cognitoDeveloperProvidedName] = email; 
    cognitoidentity.getCredentialsForIdentity(param, 
     function(err, data) { 
      if (err) return fn(err); 
      else fn(null, data); 
     }); 
} 

但我似乎無法得到它的工作

任何想法?

回答

3

想通了,在checkToken功能需要看起來像這樣:

function checkToken(providedIdentity, token, fn){ 
    var param = { 
     IdentityId: providedIdentity, 
     Logins: {} 
    }; 
    param.Logins['cognito-identity.amazonaws.com'] = token; 
    cognitoidentity.getCredentialsForIdentity(param, 
     function(err, data) { 
      if (err) return fn(err); 
      else fn(null, data); 
     }); 
} 

我需要設置cognito-identity.amazonaws.com爲登錄提供

+0

是,一旦你的cognito令牌,如你所發現的,提供者現在是cognito-identity.amazonws.com。 –

+0

在文檔中不是很清楚,必須找到一個用Java編寫的例子來找出它,希望有人找到這篇文章,並節省了我花在它上面的3個小時。 – csilk

+0

嗨@MarkMercurio和Cub3。你可以澄清這個checkToken函數是否用於檢查來自客戶端的令牌嗎?我的意思是,如果令牌是在登錄API方法中生成的(使用getOpenIdTokenForDeveloperIdentity)並將令牌發送給客戶端,則客戶端使用此令牌調用其他方法,因此需要使用getCredentialsForIdentity進行令牌驗證。它是否正確?我應該將用戶的身份標識存儲在我的數據庫中嗎?先謝謝你 – Endymion