在 SPA 中使用隐式流时,我们实际在数据库中的什么位置创建帐户?
When using Implicit Flow with a SPA, where do we actually create the account in our Database?
我正在尝试了解 OAuth2.0 隐式流程(使用 OIDC)如何与非常简单的 SPA/Mobile 客户端(又名客户端)和我的 REST Api(又名资源服务器)一起工作并创建新帐户。
我或多或少了解客户端如何从 Auth 服务请求令牌 (Auth0/Stormpath/IdentityServer/etc)。然后它使用此令牌访问受限 API 端点。
但我一直在阅读的所有示例都是 'accounts' 是在这些 Auth 服务上创建的(这是必需的,我理解)但在 my 上没有创建任何内容服务(我的资源服务器)。
我需要在我的数据库中创建一个帐户,因为我有用户 data/settings 我想存储(例如,他们下的订单等)。当然,我不想存储任何安全信息..因为这就是我使用外部授权服务的原因。
那么,有人能解释一下他们是如何使用隐式流的吗?当返回一个令牌(或者更具体地说,当使用 OpenID Connect 获取用户信息时)时,您可以判断用户是否存在,并且如果是新的,就创建一个。
我还发现令牌 issuer_id + sub
都是从身份验证服务的角度确定 unique
用户所必需的。
最后,如何预防'new account spam/abuse'?我假设在您的客户端中的某个时刻(在每个 Rest API 请求之前检查 local-storage 令牌,因为我们需要在 bearer
header 中添加一些令牌) ...当您决定创建一个新用户时 ...我的 REST Api(又名资源服务器)将有一个端点来创建新用户..就像 POST /account/
..那么怎么做保护您的服务器免受创建新帐户的新随机 POST 垃圾邮件的侵害? IP+time-delay限制?
where do we actually create the account in our Database?
创建一个包含 iss
和 sub
列的数据库 table。将这些列设置为代表用户的唯一复合键。在其中插入用户帐户。
So, can anyone explain how they use implicit flow and .. when a token (or more specifically, when OpenID Connect is used to get the user information) is returned, you figure out if a user exists or not and creates one if it's new?
听起来你已经知道答案了。
- 解析
id_token
。
- 检索
iss
和 sub
。
- 检查您应用的 table 是否有
iss
+ sub
键。
- 如果存在,则该用户存在。如果不是,则创建用户。
来自规范:
Subject Identifier: Locally unique and never reassigned identifier within the Issuer for the End-User, which is intended to be consumed by the Client.
https://openid.net/specs/openid-connect-core-1_0.html
iss
和 sub
充当代表用户的唯一复合键。这是一个例子 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
复合键。
so how do protect your server from getting spam'd new random POST's that create new accounts?
设置跨源资源共享 (CORS) 限制,以便只允许您的 SPA 域 POST 到 /api/account
端点。
我正在尝试了解 OAuth2.0 隐式流程(使用 OIDC)如何与非常简单的 SPA/Mobile 客户端(又名客户端)和我的 REST Api(又名资源服务器)一起工作并创建新帐户。
我或多或少了解客户端如何从 Auth 服务请求令牌 (Auth0/Stormpath/IdentityServer/etc)。然后它使用此令牌访问受限 API 端点。
但我一直在阅读的所有示例都是 'accounts' 是在这些 Auth 服务上创建的(这是必需的,我理解)但在 my 上没有创建任何内容服务(我的资源服务器)。
我需要在我的数据库中创建一个帐户,因为我有用户 data/settings 我想存储(例如,他们下的订单等)。当然,我不想存储任何安全信息..因为这就是我使用外部授权服务的原因。
那么,有人能解释一下他们是如何使用隐式流的吗?当返回一个令牌(或者更具体地说,当使用 OpenID Connect 获取用户信息时)时,您可以判断用户是否存在,并且如果是新的,就创建一个。
我还发现令牌 issuer_id + sub
都是从身份验证服务的角度确定 unique
用户所必需的。
最后,如何预防'new account spam/abuse'?我假设在您的客户端中的某个时刻(在每个 Rest API 请求之前检查 local-storage 令牌,因为我们需要在 bearer
header 中添加一些令牌) ...当您决定创建一个新用户时 ...我的 REST Api(又名资源服务器)将有一个端点来创建新用户..就像 POST /account/
..那么怎么做保护您的服务器免受创建新帐户的新随机 POST 垃圾邮件的侵害? IP+time-delay限制?
where do we actually create the account in our Database?
创建一个包含 iss
和 sub
列的数据库 table。将这些列设置为代表用户的唯一复合键。在其中插入用户帐户。
So, can anyone explain how they use implicit flow and .. when a token (or more specifically, when OpenID Connect is used to get the user information) is returned, you figure out if a user exists or not and creates one if it's new?
听起来你已经知道答案了。
- 解析
id_token
。 - 检索
iss
和sub
。 - 检查您应用的 table 是否有
iss
+sub
键。 - 如果存在,则该用户存在。如果不是,则创建用户。
来自规范:
Subject Identifier: Locally unique and never reassigned identifier within the Issuer for the End-User, which is intended to be consumed by the Client.
https://openid.net/specs/openid-connect-core-1_0.html
iss
和 sub
充当代表用户的唯一复合键。这是一个例子 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
复合键。
so how do protect your server from getting spam'd new random POST's that create new accounts?
设置跨源资源共享 (CORS) 限制,以便只允许您的 SPA 域 POST 到 /api/account
端点。