【问题标题】:IdentityServer4: How to set a role for Google user?IdentityServer4:如何为 Google 用户设置角色?
【发布时间】:2022-01-22 17:38:51
【问题描述】:

我有 3 个应用程序:

  • IdentityServer4 API,提供 Google 身份验证,还提供访问令牌以授权资源 API。
  • 一个简单的资源 API,它提供一些来自 DB 的数据。
  • 一个简单的 React 客户端,它有 4 个按钮:
    • 登录,用于 Google 身份验证
    • 退出
    • 获取数据 - 使用访问令牌对资源 API 的简单请求并从 Db 获取数据
    • 获取用户数据 - 返回用户配置文件和令牌(用于调试目的)

我没有放任何示例代码,因为我的问题与代码无关,我知道我错过了,我请求指导。

工作流程运行良好:用户按下登录按钮,它被重定向到 IdentityServer4 API for Google Auth。从那里它被重定向到客户端的回调页面,然后从那里重定向到索引页面。我收到用户数据和令牌,我可以从资源 API 请求数据并且它正在工作。

我的问题是:如何为 Google 用户分配角色? 我没有用户保存在数据库中。我想要三种类型的用户:超级管理员、管理员、查看者,并且这些角色中的每一个都有可以访问的有限端点。

为了限制他们的访问,我看到我可以使用Claims-based authorizationRole-based authorization

那么,我的问题是如何为想要登录我的应用的 Google 用户提供特定的声明/角色?工作流程是什么?我必须先将它保存在数据库中吗?或者 Google 提供了一项服务,我可以在其中添加电子邮件地址并为该地址选择角色?

非常感谢!

【问题讨论】:

    标签: identityserver4 google-authentication claims-based-identity user-roles api-authorization


    【解决方案1】:

    在您的回调中收到 Google 的响应后,您可以处理该用户并执行您想做的任何事情。以下是我从 identityserver4 link 的文档页面获取的回调中可以执行的一些典型任务:

    处理回调并登录用户

    在回调页面上,您的典型任务是:

    • 检查外部提供者返回的身份。
    • 决定如何与该用户打交道。这可能是 根据这是新用户还是返回用户的事实而有所不同 用户。
    • 新用户可能需要额外的步骤和 UI 才能被允许 在。
    • 可能会创建一个新的内部用户帐户,该帐户链接到 外部供应商。
    • 存储您要保留的外部声明。
    • 删除临时cookie
    • 登录用户

    我要做的是创建一个新的内部用户帐户,该帐户链接到外部提供商并向该用户添加角色。

    如果您不想将用户保存在数据库中,您可以在回调方法中向用户添加额外的声明,并在令牌中使用该声明。我认为link 会对此有所帮助。

    【讨论】:

    • 感谢您的重播! :)
    • 我喜欢您的建议,即创建一个与外部帐户相关联的内部用户帐户。但我认为这会产生一个问题:如果我想给用户一个角色,该用户必须先登录,因为我无法为不在数据库中的用户设置角色。我对吗 ?有没有办法在用户登录应用程序之前为其赋予角色?
    • 如果你创建一个内部用户,你不能不把它放在数据库上。当您在回调方法中在数据库中创建本地用户时,您也设置了角色,因此当生成令牌时,它将在内部具有角色(如果它具有为客户端注册的范围“角色”)。当回调中不是本地用户时,向名为角色的用户添加额外的声明并指定角色。
    • 好的,用户可以是任何模型,还是必须继承一个特定的类,比如IdentityUser类?
    • 是的,在这两种情况下它都应该是 IdentityUser(或任何子类),因为 UserManager 和 SignInManager 类需要它。
    猜你喜欢
    • 2019-12-04
    • 2017-10-07
    • 2019-04-24
    • 1970-01-01
    • 2018-11-29
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多