Oauth 2.0 当对SPA使用隐式流时,我们实际上在数据库中的何处创建帐户?

Oauth 2.0 当对SPA使用隐式流时,我们实际上在数据库中的何处创建帐户?,oauth-2.0,single-page-application,openid-connect,implicit-flow,Oauth 2.0,Single Page Application,Openid Connect,Implicit Flow,我试图了解OAuth2.0隐式流(带OIDC)如何与一个非常简单的SPA/移动客户端(又名客户端)和我的RESTAPI(又名资源服务器)一起工作,并创建新帐户 我或多或少了解客户端如何从身份验证服务(Auth0/Stormpath/IdentityServer/etc)请求令牌。然后,它使用此令牌访问受限制的API端点 但我一直在读的所有例子都是,在这些Auth服务上创建了“帐户”(这是必需的,我理解),但在我的服务(我的资源服务器)上没有创建任何内容 我需要在数据库中创建一个帐户,因为我有要存

我试图了解OAuth2.0隐式流(带OIDC)如何与一个非常简单的SPA/移动客户端(又名客户端)和我的RESTAPI(又名资源服务器)一起工作,并创建新帐户

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

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

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

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

我还建议,从身份验证服务的角度确定
唯一的
用户时,都需要令牌
issuer\u id+sub

最后,您如何防止“新帐户垃圾邮件/滥用”?我假设在您的客户机中的某个点(在每次Rest API请求之前检查本地存储令牌,因为我们需要在
承载
头中粘贴一些令牌)…当您决定创建新用户时。。。我的REST Api(又名资源服务器)将有一个端点来创建新用户。。比如
POST/account/
。。那么,如何保护您的服务器免受垃圾邮件的新随机帖子的创建新帐户?IP+延时限制

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

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

那么,谁能解释一下他们是如何使用隐式流和。。当返回一个令牌(或者更具体地说,当使用OpenID Connect获取用户信息时)时,您将确定用户是否存在,并创建一个新的用户

听起来你已经知道答案了

  • 解析
    id\u令牌
  • 检索
    iss
    sub
  • 检查应用程序表中的
    iss
    +
    sub
  • 如果它在那里,那么该用户就存在。如果不是,则创建用户 根据规范:

    主题标识符:在发卡机构中为最终用户指定的本地唯一且从不重新分配的标识符,该标识符将由客户端使用

    iss
    sub
    充当代表用户的唯一复合键。下面是一个示例
    id\u令牌

    {
     alg: "RS256",
     kid: "1e9gdk7"
    }.
    {
     iss: "http://server.example.com",
     sub: "248289761001",
     aud: "s6BhdRkqt3",
     nonce: "n-0S6_WzA2Mj",
     exp: 1311281970,
     iat: 1311280970
    }.
    [signature]
    
    对待
    iss
    +
    sub
    复合键的方式与对待任何其他唯一用户标识符的方式相同

    那么,如何保护您的服务器免受垃圾邮件的新随机帖子的创建新帐户


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

    好的,太好了!因此,当我得到令牌时,我需要点击我们的API来检查是否需要创建一个用户,或者只是使用现有的用户。此外,我可以使用CORS限制(白名单?)来保护该端点。