gpt4 book ai didi

c# - 在利用 OAuth 代码流时,如何使用用户定义的唯一标识符注册新用户?

转载 作者:行者123 更新时间:2023-11-30 12:59:04 25 4
gpt4 key购买 nike

我正在为网站构建注册/登录流程。我计划使用 Facebook 作为我的身份提供者,而不是自己滚动。

我对 Facebook 的服务器端登录流程有很好的感觉:

  1. 调用 FB login API获取代码
  2. Exchange the code用于用户访问 token
  3. Inspect用户访问 token
  4. 验证用户访问 token 详细信息

完成这些步骤后,我想检查经过身份验证的用户是否已经在我的系统中注册。如果是,只需返回一个新生成的承载 token ,这样用户就可以向资源服务器发出后续请求以访问 protected 数据。

但是,如果用户未在系统中注册,那么我想通过创建数据库条目来注册他们。不过,在创建此条目之前,我想从用户那里收集一条信息。也就是说,我想让他们告诉我他们想要的“用户名”。我将使用这个唯一的用户名作为我的数据库主键。

我不是 100% 确定如何在创建数据库条目之前安全地询问用户所需的用户名。这是我的问题。 :)

我的一个想法是创建一个“兑换代码”。此代码将被加密并包含用户初始化详细信息、只有服务器知道的 secret 以及时间戳。像这样:

code: {
mySecret: "super-secret-value",
expirationDate: "date-value",
user: { ... },
}

在看到用户不在我的系统中后,我会用代码响应 + 将客户端重定向到一个页面,他们可以在其中指定他们的用户名。将他们的用户名 + 代码提交回服务器后,我可以解密代码,并验证 mySecret 以确定代码未被篡改。如果一切正常,使用兑换代码中的 user 信息在数据库中创建用户。最后,我会为用户生成一个新的不记名 token 并将其发送给客户端。

问题

  1. 我提议的兑换代码策略是否是一种在创建后端数据库条目之前请求用户名的安全方式?
  2. 如果不是,会是什么?
  3. 如果是,在 C# 中用于此目的的安全加密/解密例程是什么?

流序

  • 上面的第 1-4 步对应于“登录”到“验证”箭头。
  • 我提出的兑换代码策略对应于紫色箭头。
  • 红色文本对应于 Facebook 特定的术语。

enter image description here

请注意,Stack Overflow 所做的事情与我想做的事情非常相似。在 SO 上创建您的帐户之前,它会询问您想要的显示名称(这发生在通过 Facebook、Google 等进行身份验证之后)。提交您的显示名称后,您的帐户即已注册。

最佳答案

使用开源 IdentityServer3。

无论您选择什么流程,它都已经在他们的服务器中标准化了。包括(如果你想要或需要)OpenID、OAuth2 等。

关于c# - 在利用 OAuth 代码流时,如何使用用户定义的唯一标识符注册新用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27342304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com