【问题标题】:Add Roles or Claims to User created via Google OAuth2向通过 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。

标签: asp.net asp.net-mvc asp.net-mvc-5 google-oauth asp.net-identity


【解决方案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 控制器中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2017-10-16
    • 2021-08-02
    • 2017-01-27
    • 2018-02-10
    • 2020-08-20
    • 2013-02-10
    • 2011-03-21
    相关资源
    最近更新 更多