向通过 Google OAuth2 创建的用户添加角色或声明

Posted

技术标签:

【中文标题】向通过 Google OAuth2 创建的用户添加角色或声明【英文标题】:Add Roles or Claims to User created via Google OAuth2 【发布时间】:2015-07-11 13:35:31 【问题描述】:

我们已经实现了 Google OAuth2,它在 ASPNetUsers 表中创建用户。这工作正常,我们可以通过 User.Identity.GetUserName() 看到经过身份验证的用户。

如果我们将此用户添加到一个角色,比如“MyCustomRole”,通过 AspNetRoles 和 AspNetUserRoles 表,任何受以下保护的方法:

[Authorize(Roles="MyCustomRole")]

无法访问。应用程序将经过身份验证的用户转发到登录控制器。

将这些经过外部身份验证的用户添加到角色的正确机制是什么,让这些角色可以通过 [Authorize(Roles="")] 属性访问?

【问题讨论】:

原来我在过滤器中使用的是 ID 而不是名称。因此,不需要 [Authorize(Roles="MY_ROLE_ID")],它需要简单地是 [Authorize(Roles="MyRole")]。能够通过 OAuth2 向由外部系统验证的用户添加角色非常好,也非常简单,只需像添加任何其他类型的用户一样将行添加到 AspNetUserRoles。 【参考方案1】:

不确定您使用的是哪个版本的asp identity,但我使用此代码完成了您想要的操作

   [HttpPost]
    public async Task<ActionResult> AddUserToRole()
    
     var result = await UserManager.AddToRolesAsync(User.Identity.GetUserId(),
 new[]"YourCustomRole");
    if (!result.Succeeded) 
       return View();
    
   else
       return RedirectToAction("index");
     
   

要对此进行测试,您可能需要创建一个空项目,一个空的!然后在 newget 包中运行这个 nuget PM&gt; Install-Package Microsoft.AspNet.Identity.Samples -Pre 那么您可以将我的操作代码放在UsersAdmin 控制器中

【讨论】:

以上是关于向通过 Google OAuth2 创建的用户添加角色或声明的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot OAuth2 - 使用本地用户数据库向 Facebook 进行身份验证

通过 API 向 Google Places 添加新地点的 PHP 代码

强制用户通过 Google OAuth2 选择帐户

Spring Cloud OAuth2:添加用户权限

向 Google 进行身份验证时,从 Spring OAuth2 授权服务器发出 JWT 令牌

如何通过 API 向 Google Drive 添加/创建/插入文件?