1

授权角色我目前试图将角色添加到我的Angular2 AspNetCore的WebAPI示例应用程序,它可以在这里找到:https://github.com/tonywr71/SnazzleAngular2 OpenIddict和AspNetCore的WebAPI

不幸的是,我有点卡住了。我已经成功实施了ASOS认证。该令牌是从connect/token方法返回的,我可以使用头中的不记名令牌调用我的自定义方法,并且它将成功授权。

现在还有两个问题。一个是,即使它授权,User.Identity对象中的名称字段未设置。我通过向Claims添加用户名来解决这个问题。其次,我希望填充角色,以便在Authorize属性中使用角色。我在Startup.cs文件中启用了Asp.Net Core Identity,并配置了数据库。所以我真的希望能够在Webapi方法上放置一个Authorize属性,并在该属性中设置允许的角色。

任何想法如何让它填充名称和角色?

回答

2

任何想法如何让它填充名称和角色?

要获取用户名,您必须请求标准profile范围。对于角色,请添加roles

E.g:

grant_type=password&username=johndoe&password=A3ddj3w&scope=openid%20profile%20roles 
+0

谢谢,这似乎工作。它似乎违反了某些安全原则,通过授权客户端提交的角色。这就是为什么我最初忽略了这一点。他们有这种想法吗? – tone

+0

角色不是由客户“提交”的。 “角色”范围仅限于允许OpenIddict在访问和身份令牌中返回(并披露)它们。由于身份令牌可以被客户端应用程序读取(如果它是JWT,访问令牌也是可读的),因此存在数据暴露风险,这就是为什么使用额外范围来确保开发人员意识到这一事实的原因。 – Pinpoint

+0

我在这里还是有点困惑。如果我不添加“角色”范围,那么Authorize属性的Roles属性将不会被识别,也不会成功授权。对我来说,要让角色能够在服务器上授权,似乎有点奇怪,我必须从客户端提交“角色”范围。如果我将“角色”作用域放在客户端请求上,那么角色列表也会发送给客户端。是这样吗? – tone