我正在研究各种类型的访问控制模型,并且知道abac和rbac是受欢迎的模型.
对于我的一个项目,我有一个基本的场景,我无法理解我应该选择RBAC还是ABAC.显然RBAC是ABAC我应该去的子集,ABAC但是ABAC需要一些经验才能在xacml中编写策略.我们正在使用WSOIS和APIM.
我的身份服务器(IS)中有管理员,所有者和成员角色.
在某个时刻,我使用HTTP动词来实现愿望结果,即所有者无法访问DELETE请求,成员无法访问PUT&DELETE.
问题
我有一个仪表板,我在其中显示不同的部分,如最高用户,计费,服务,顶级消费者等.
nav-bar根据服务器的用户角色和属性进行填充,例如,成员不应该有权访问其他用户(添加,列表)nav-bar.nav-bar项目依赖于用户角色,以便我们可以通过RBAC?题
我们可以实现所有这些场景,RBAC但是为了管理nav-bar和查看相关的实现,我们需要在服务器中添加业务逻辑而不是使用WSO2-IS和WSO2-APIM.有没有办法管理隐藏/显示按钮和部分等视图权限,甚至消费相同,API但它应该为不同的api消费者返回不同的结果.
我写了一个使用POJO,servlet和JSP的简单Java.我在用:
我使用常春藤来解决我的依赖关系:
<dependency org="oracle" name="ojdbc6" rev="11g" conf="default -> default" />
<dependency org="org.hibernate" name="hibernate-commons-annotations" rev="3.2.0.Final" conf="compile -> runtime" />
<dependency org="org.hibernate" name="hibernate-annotations" rev="3.5.6-Final" conf="default -> runtime" />
<dependency org="org.hibernate" name="hibernate-core" rev="3.6.5.Final" conf="default -> runtime" />
<dependency org="org.hibernate" name="hibernate-validator" rev="4.0.2.GA" conf="runtime -> runtime" />
<dependency org="org.hibernate.javax.persistence" name="hibernate-jpa-2.0-api" rev="1.0.1.Final" conf="compile -> default" />
<dependency org="org.hibernate" name="hibernate-entitymanager" rev="3.6.5.Final" conf="compile -> default" />
Run Code Online (Sandbox Code Playgroud)
我的POJO车辆包含以下注释:
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Version;
@Entity …Run Code Online (Sandbox Code Playgroud) 这段代码没有像我想象的那样工作.
a=-1;
b=0.1;
for(i=0;i<=20;i++){
System.out.println(i + ". x= " + a);
a=a+b;
}
Run Code Online (Sandbox Code Playgroud)
在控制台上我应该看到:
0. x= -1.0
1. x= -0.9
2. x= -0.8
3. x= -0.7
4. x= -0.6
5. x= -0.5
6. x= -0.4
7. x= -0.3
Run Code Online (Sandbox Code Playgroud)
...等等
但这是发生的事情:
0. x= -1.0
1. x= -0.9
2. x= -0.8
3. x= -0.7000000000000001
4. x= -0.6000000000000001
5. x= -0.5000000000000001
6. x= -0.40000000000000013
7. x= -0.30000000000000016
8. x= -0.20000000000000015
9. x= -0.10000000000000014
10. x= -1.3877787807814457E-16
11. x= 0.09999999999999987
12. x= 0.19999999999999987
13. …Run Code Online (Sandbox Code Playgroud) 我有一个C#.net应用程序,它为公司的内部用户和外部客户提供服务.我需要做一些细粒度的授权,比如访问哪些资源.所以我需要基于资源或基于属性的东西,而不是基于角色的授权.
我想到的是:
第一种方法的问题在于它不是集中式的,也不是标准的,因此其他系统不能将其用于授权.
第二种方法的问题是它可能更慢(由于每个资源需要额外的调用).此外,我不确定市场上的应用程序如何支持像XACML这样的标准授权,以便于将来的集成.
那么,一般来说,对于应该为内部用户和外部客户提供服务的Web应用程序进行细粒度授权的良好实践是什么?
我有一个简单的POJO,我用REST注释注释如下:
@GET
@Path("/domains/{domainid}")
@Override
public Domain getDomain(@PathParam("domainid") UUID domainID) throws Exception {
logger.info("Retrieving domain "+ domainID);
Domain d = null;
try {
d = MyClient.getDomains().get(domainID.toString());
logger.debug("Returning "+d.getName());
} catch (Exception e) {
logger.error("Could not retrieve domain", e);
}
return d;
}
Run Code Online (Sandbox Code Playgroud)
请注意,包含d.getName()的日志语句实际上可以抛出一个NPE,然后捕获并记录该NPE.这不是很漂亮,但这也不是重点.
最终d是否有价值,我将其归还.
在空值的情况下,我的客户端收到HTTP 204状态代码.这是wget显示的内容:HTTP request sent, awaiting response... 204 No Content
奇怪的是,我的浏览器并没有让步.它们仍然显示上一页(我认为在没有收到内容时保持放置是有意义的).我原本期待一个空白页面.
三个问题:
谢谢
===编辑===
这里有一个很好的问题:在找不到REST资源时返回404是否正确?
我目前正在为所有客户(网络和移动)开发OAuth2实施.到目前为止,没什么好看的,但是我们希望在范围上有更多的复杂性,这样我们就可以授予对某些对象的部分访问权限,直到单个属性的粒度.
示例:客户端获取资源的访问权限,假设具有其所有公共属性的用户对象.客户端具有完全读取权限,但只允许编辑某些属性,例如密码和用户名,但不能编辑位置和/或生日.
到目前为止,我的想法是,这种粒度是在授权服务器上定义的,只是由资源服务器解释.
基于RFC,scope是一个基于字符串的逗号分隔值,所以是一个简单的列表(http://tools.ietf.org/html/rfc6749#page-23)
scope参数的值表示为以空格
分隔的区分大小写的字符串列表.字符串由
授权服务器定义.如果值包含多个以空格分隔的字符串,则它们的顺序无关紧要,并且每个字符串都会
为请求的范围添加其他访问范围.Run Code Online (Sandbox Code Playgroud)scope = scope-token *( SP scope-token ) scope-token = 1*( %x21 / %x23-5B / %x5D-7E )
因此,我提供json作为范围的第一个假设可能不起作用,所以我考虑引入可能变得复杂的命名空间,例如(范围:用户写入完整读取列表的属性或类似的东西).
有没有最好的做法,我在RFC中遗漏了什么或者我是否完全滥用OAuth?
基于Spring安全框架实现安全解决方案,尤其是acl模块.
应用程序中有数百万个域对象和数百个用户.
使用Spring Security Acl模块,acl_sid和其他相关表中的条目增长到10亿,这会影响应用程序的性能.
想知道处理此类场景的最佳实践.
是否有任何替代安全框架可以有效地处理类似情况.
performance authorization spring-security user-permissions spring-security-acl
正如它在标题中所说的那样我已经为注册用户分配了声明,我现在正试图在用户登录sql server中的UserClaims表中的应用程序时检索声明值,我觉得这有点难以做到,因为这是我第一次使用索赔.
寻找我们的方向来实现这一目标,提前谢谢你.
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.UserName, Email = model.Email, UserRoleId = model.RoleId };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
_logger.LogInformation("User created a new account with password.");
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);
await _emailSender.SendEmailConfirmationAsync(model.Email, callbackUrl);
await _signInManager.SignInAsync(user, isPersistent: false);
_logger.LogInformation("User created a new account with password.");
await addUserClaims(model.CusomterId, model.UserName);
return …Run Code Online (Sandbox Code Playgroud) claims-based-identity claims asp.net-core-identity asp.net-core-2.0