我正在为网关后面的服务开发一种方法,以便于通信。
该计划使用oauth令牌中的作用域,该令牌将由运行在同一系统上的服务使用。
例如。如果oauth令牌具有作用域“acct”和“user”,bellow api方法将可用。如果ouath令牌的作用域为'admin',但缺少作用域'acct'和'user'中的一个或两个,则在不更改注释的情况下,我希望它也可用。
@PreAuthorize("#oauth2.hasScope('acct') and #oauth2.hasScope('user')")
@RequestMapping(value = "/scopedtest", produces = "application/json")
public Map<String, String> indexWithScope() {
return getHashMapResult();
}
我希望这个'admin'范围被全球接受,这样服务开发人员就不需要在他们制作的每个api控制器上都包含admin范围,但仍然允许内部服务访问其他内部服务的api。
这将作为代码工作,它将拦截调用以预授权,并将响应更改为调用方被授权,如果它具有'admin'范围的话。如果oauth令牌具有预授权注释所需的作用域,调用将正常进行。
第一步是创建一个自定义选民类
public class CustomVoter implements AccessDecisionVoter {
@Override
public boolean supports(ConfigAttribute attribute) {
return true;
}
@Override
public int vote(Authentication authentication, Object object, Collection collection) {
//Place your decision code here
if( check_is_true() ) {
//grant access
return ACCESS_GRANTED;
} else if ( check_is_false() ) {
//deny access
return ACCESS_DENIED;
} else {
//do not make a choice
return ACCESS_ABSTAIN;
}
}
@Override
public boolean supports(Class clazz) {
return true;
}
}
我们现在需要将该选民添加到将做出访问决定的选民列表中。
@Configuration
public class DecisionVotersConfiguration {
@Autowired
MethodInterceptor methodSecurityInterceptor;
@PostConstruct
@DependsOn("methodSecurityInterceptor")
public void modifyAccessDecisionManager() {
((AffirmativeBased)((MethodSecurityInterceptor)methodSecurityInterceptor).getAccessDecisionManager()).getDecisionVoters().add(0, new CustomVoter());
}
}
这将添加您的自定义决策投票人决策投票人列表。通过将其置于索引0,它将首先被检查。这将允许选民在以后的检查拒绝访问之前批准访问。这个配置类中的方法将取决于正在创建的methodSecurityInterceptor,它将具有决策投票者的初始列表。
我正在试图理解一些Spring Security代码。我也是Spring Security的新手,我想我在这里遗漏了一些基本的东西。 谢谢,雷。
请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 pre_thaw string get GET参数组,本组参数需要参与签名 是 object └biz_id 业务单号(biz_id与payid只传其一) 是 20191125001 number └amt 解冻金额(退款给客人金额,0或者空表示商家收取全部费
如何配置和利用授权功能,然后使其全局可用于所有endpoint? 我的应用程序使用 HTTP 与承载方法进行保护。 Swagger UI身份验证的当前配置
EDIT做了一些更多的测试:当我只配置secure-annotations=“enabled”时,基于角色的安全性工作。此外,配置pre-postannotations=“enabled”时,既不安全也不预授权。当我只配置前-后注释时,它仍然不起作用。 编辑2 更多的测试:只有secured_annotations=“enabled”,对channelservice的调用通过Cglib2AopPr
我正在尝试使用,我想将添加到我的像这样: 但下面的不起作用: 我的服务器是asp。net webApi。请帮忙,我该怎么办?
我们使用Spring Security OAuth2保护我们的REST服务(用于服务器到服务器通信,不涉及用户)。但是,当您尝试访问浏览器中的受保护资源时,它将显示: 我们希望这是我们自己选择的自定义页面。有办法吗? 设置“拒绝访问”页面不起作用。首先,它需要定义一个登录页面,我们没有,因为这是一个纯服务器到服务器的通信。另一个原因是,这个属性自Spring 3.0..或类似的版本以来就被弃用了。