当将隐式流与SPA一起使用时,我们实际在数据库中的何处创建帐户



我正在努力了解OAuth2.0隐式流(带OIDC(如何与一个非常简单的SPA/Mobile客户端(又名客户端(和我的REST Api(又名资源服务器(一起工作并创建新帐户

我或多或少了解客户端如何从身份验证服务(Auth0/Stormpath/IdentityServer/等(请求令牌。然后,它使用此令牌访问受限制的API端点。

但我一直读到的所有例子都是,"帐户"是在这些Auth服务上创建的(这是必需的,我理解(,但在我的服务(我的资源服务器(上没有创建任何内容。

我需要在我的数据库中创建一个帐户,因为我有想要存储的用户数据/设置(例如,他们的订单等(。当然,我不想存储任何安全信息。。因为这就是我使用外部身份验证服务的原因。

那么,有人能解释一下他们是如何使用隐式流的吗。。当返回一个令牌(或者更具体地说,当OpenIDConnect用于获取用户信息时(时,您可以确定用户是否存在,并在用户是新用户时创建一个。

我还发现,令牌issuer_id + sub都是从身份验证服务的角度确定unique用户所必需的。

最后,如何防止"新帐户垃圾邮件/滥用"?我假设在您的客户端中的某个时刻(它在每个Rest API请求之前检查local-storage令牌,因为我们需要在bearer头中粘贴一些令牌(。。。当你决定创建一个新用户时。。。我的RESTApi(又名资源服务器(将有一个端点来创建新用户。。如POST /account/。。那么,如何保护你的服务器免受垃圾邮件的影响呢?新的随机POST会创建新的帐户?IP+延时限制?

我们在数据库中实际在哪里创建帐户?

创建一个包含isssub列的数据库表。将这些列设置为表示用户的唯一复合键。在其中插入用户帐户。

那么,有人能解释一下他们是如何使用隐式流的吗。。当一个令牌(或者更具体地说,当OpenIDConnect被用来获取用户信息时(被返回时,你会弄清楚一个用户是否存在,如果它是新的,你会创建一个吗?

听起来你已经知道答案了。

  1. 解析id_token
  2. 检索isssub
  3. 请检查应用程序表中的iss+sub密钥
  4. 如果它在那里,那么该用户就存在。如果不是,则创建用户

来自规格:

主题标识符:在发卡机构内为最终用户指定的本地唯一且从未重新分配的标识符,供客户使用。

https://openid.net/specs/openid-connect-core-1_0.html

CCD_ 12和CCD_ 13充当表示用户的唯一复合密钥。以下是一个示例id_token

{
 alg: "RS256",
 kid: "1e9gdk7"
}.
{
 iss: "http://server.example.com",
 sub: "248289761001",
 aud: "s6BhdRkqt3",
 nonce: "n-0S6_WzA2Mj",
 exp: 1311281970,
 iat: 1311280970
}.
[signature]

对待iss+sub复合密钥的方式与对待任何其他唯一用户标识符的方式相同。

那么,如何保护你的服务器免受垃圾邮件的影响呢?新的随机POST会创建新的帐户?

设置跨源资源共享(CORS(限制,以便仅允许您的SPA的域POST到/api/account端点。

相关内容

最新更新