在客户端或服务器端交换令牌授权码



我试图理解授权代码流程(目前正在试验AWS Cognito和托管UI),有一些含糊不清。

所以我用我的凭据登录,我在URL中获得授权代码。下一步是捕获代码并将授权代码交换为令牌。

  1. 我应该在哪里进行交换,在客户端(使用Javascript)或后端,然后将令牌作为cookie或在header中发送?有什么建议吗?

  2. 我也在几个来源上读到授权代码比隐式授权更好,更安全。一个原因是用户永远看不到令牌。我不知道这是怎么回事,因为据我所知,令牌必须存储为cookie或在会话/本地存储期间,我们的会话在一个网站上?

  3. 我们在哪里刷新令牌,客户端还是服务器端?我猜,令牌不是存储在浏览器的访问和id_token,但我们必须将它存储在某个地方的后端也许,然后做一个映射。有什么建议吗?

  4. 我们交换后需要授权码吗?我们可以"忘记"吗?关于我们现在的会议?

我不确定是否相关,但cognito应该用于AWS无服务器应用程序(cognito + S3 + API网关+ Lambda)。

首先你必须配置Cognito,从那里你会得到ClientId和IdentityPoolId。现在要验证任何用户,我建议使用aws-cognito javascript SDK,在这里您可以找到一些示例。

成功登录后,您将获得一个JWT令牌,可以使用

保存该令牌
window.sessionStorage.setItem("idToken", idToken);

在API网关中,您将找到一个选项来授权您必须通过提供IdentityPoolId/ClientId来使用Cognito,这将自动检查使用Cognito的有效令牌,如果找到正确的令牌,则将调用附加的lambda函数,否则API将抛出错误。如果会话在Cognito中过期,则会引发错误。

现在对于后续的API调用使用jwt令牌作为Authorization: header,如下所示

$.ajax({
method:"GET",
url: "url here",
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", idToken);
},
...   

最新更新