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

5
我们已经实现了Google OAuth2,并且它会在ASPNetUsers表中创建用户。这一切都很正常,我们可以通过User.Identity.GetUserName()查看已认证的用户。
如果我们通过AspNetRoles和AspNetUserRoles表将该用户添加到角色中,例如"MyCustomRole",那么任何受到以下保护的方法:
[Authorize(Roles="MyCustomRole")]

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

如何正确地将这些外部验证的用户添加到角色中,然后使这些角色可以被[Authorize(Roles="")]属性访问?


事实证明,我在过滤器中使用的是 Id 而不是 Name。因此,需要将 [Authorize(Roles="MY_ROLE_ID")] 简单地改为 [Authorize(Roles="MyRole")]。通过向 AspNetUserRoles 添加行,就像处理其他类型用户一样,可以轻松地将角色添加到通过 OAuth2 进行身份验证的用户中。这很好,也很简单。 - Pittsburgh DBA
1个回答

0

不确定你正在使用哪个版本的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");
     }
   }

若要测试此功能,您可能需要创建一个空项目,然后在新的获取程序包中运行以下命令:

PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre

接着,您可以将我的操作代码放入 UsersAdmin 控制器中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接