Web API 和 .NET 4.5:声明和权利

Posted

技术标签:

【中文标题】Web API 和 .NET 4.5:声明和权利【英文标题】:Web API and .NET 4.5: Claims and rights 【发布时间】:2012-06-28 17:31:52 【问题描述】:

是否有使用权利管理声明的最佳实践?

我正在使用新的 .net 4.5 和新的声明类。 目前我正在做这样的事情:

new ClaimsIdentity(new List<Claim>
                    
                        new Claim("Username", user.UserName),
                        new Claim("UserNumber", user.UserNumber.ToString()),
                        new Claim("Creation_Right", ""),
                        new Claim("Edit_Right", "")
                    

我添加了没有值的权利声明。 稍后我会检查是否存在 存在 权利。不需要值(如真/假) - 如果存在,则其隐含的 'true'。

有更好的方法吗?

【问题讨论】:

【参考方案1】:

也许吧。看起来您正在做的是将身份验证和授权合并在一起,在身份验证时做出访问策略决策。

您还可以选择将授权组件与身份验证组件分开。声明表示一组有关用户的信息,可用于做出授权决定。也就是说,您的身份验证步骤会产生一组声明,并且每当您的用户尝试访问某些内容时,这些声明都会被提供给授权组件,该组件会做出决定。

这提供了一些灵活性,因为您的授权政策可以独立于您的索赔签发系统而改变和发展。例如,您可以发出将某人标识为管理员的角色声明,还可以发出指定用户如何登录的身份验证方法声明,例如使用智能卡或用户名和密码。这使您可以定义访问策略,您可以只需要管理员角色来访问某些资源,而其他更敏感的资源需要管理员角色并使用强大的身份验证机制。这也意味着您可以根据上下文在多个不同的访问策略之间切换。您的在线威士忌商店可能会在美国使用 ageOver21 声明,但您网站的加拿大版本需要 over18 或 over19 声明。将 authZ 与 authN 分开可以实现这种灵活性。

【讨论】:

嗨,也许我应该提到我正在使用 ASP.NET Web API。认证和授权在框架中是分开的。我将身份验证属性添加到控制器的方法中,并且只有在用户通过身份验证时才能调用它们。在我检查索赔的方法中,允许用户这样做。简单的“在管理员组中”对我不起作用。我的系统中有很多权利。我可以为每项权利添加一个组:(“允许创建”、“允许删除”的组,......)但我认为这不是一个好主意。

以上是关于Web API 和 .NET 4.5:声明和权利的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 4.5 Web API 2.0,JWT 消息处理程序将状态 0 返回到 Angular 7 HTTP 拦截器

在 Web Api Controller (.Net Core 2.1) 中获取声明和订阅

如何使用 api 连接器和 asp net core web api 通过自定义声明丰富 azure b2c 令牌

如何使用 Web Api Asp.Net Core 实现基于声明的授权?

为 Web 应用程序创建全局变量 - ASP.NET

Azure AD 多租户,.Net Core Web API 与 JWT 令牌