以上就是给各位分享方法级别的#oauth2安全表达式,同时本文还将给你拓展AlamofireOauth2OAuth2的Swift实现、android-使用OAuth2安全认证移动访问的选项、angul
以上就是给各位分享方法级别的#oauth2安全表达式,同时本文还将给你拓展AlamofireOauth2 OAuth2 的 Swift 实现、android-使用OAuth2安全认证移动访问的选项、angular-oauth2 —— NG 的 OAuth2 认证模块、Discord OAuth2 - OAuth2 URL 链接之间有什么区别?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 方法级别的#oauth2安全表达式
- AlamofireOauth2 OAuth2 的 Swift 实现
- android-使用OAuth2安全认证移动访问的选项
- angular-oauth2 —— NG 的 OAuth2 认证模块
- Discord OAuth2 - OAuth2 URL 链接之间有什么区别?
方法级别的#oauth2安全表达式
如何解决方法级别的#oauth2安全表达式?
要启用#oAuth2安全表达式,只需要将默认表达式处理程序设置为OAuth2MethodSecurityExpressionHandler而不是DefaultMethodSecurityExpressionHandler。由于OAuth2MethodSecurityExpressionHandler仍然对其进行了扩展,因此整个先前的功能保持不变。在我的配置中,我同时使用了GlobalMethodSecurityConfiguration和WebSecurityConfigurerAdapter。
@Configuration
@EnableGlobalMethodSecurity
public class MethodSecurityConfiguration extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
return new OAuth2MethodSecurityExpressionHandler();
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
...
}
@Configuration
@Import({ SecurityConfiguration.class, MethodSecurityConfiguration.class })
public class AppConfiguration {
...
}
解决方法
我应该怎么做才能在方法级别上使用#oauth2安全表达式,例如下面的示例?
@RequestMapping(value = "email",method = RequestMethod.GET)
@ResponseBody
@PreAuthorize("#oauth2.hasScope(''read'')")
public String email() {
return "test@email.com";
}
如果我请求该资源,我会收到
[INFO] java.lang.IllegalArgumentException: Failed to evaluate expression ''#oauth2.hasScope(''read'')''
[INFO] at org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean(ExpressionUtils.java:14)
[INFO] at org.springframework.security.access.expression.method.ExpressionBasedPreInvocationAdvice.before(ExpressionBasedPreInvocationAdvice.java:44)
[INFO] at org.springframework.security.access.prepost.PreInvocationAuthorizationAdviceVoter.vote(PreInvocationAuthorizationAdviceVoter.java:57)
[INFO] at org.springframework.security.access.prepost.PreInvocationAuthorizationAdviceVoter.vote(PreInvocationAuthorizationAdviceVoter.java:25)
[INFO] at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:62)
[INFO] at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:232)
[INFO] at org.springframework.security.access.intercept.aspectj.AspectJMethodSecurityInterceptor.invoke(AspectJMethodSecurityInterceptor.java:43)
[INFO] at org.springframework.security.access.intercept.aspectj.aspect.AnnotationSecurityAspect.ajc$around$org_springframework_security_access_intercept_aspectj_aspect_AnnotationSecurityAspect$1$c4d57a2b(AnnotationSecurityAspect.aj:63)
[INFO] at pl.insert.controllers.ResourceController.email(ResourceController.java:22)
如果我在ResourceServerConfiguration中指定访问权限,而不是@Controllers的方法,则同样的方法会很好地工作
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.requestMatchers().antMatchers("/oauth/resources/**");
http.authorizeRequests().anyRequest().access("#oauth2.hasScope(''read'')");
}
}
@PreAuthorize(“ permitAll”)或@PreAuthorize(“
denyAll”)之类的标准安全表达式可以按预期工作。因此,可能我必须告诉我的AspectJMethodSecurityInterceptor如何使用OAuth2WebSecurityExpressionHandler。有任何想法吗?
AlamofireOauth2 OAuth2 的 Swift 实现
AlamofireOauth2 介绍
AlamofireOauth2 是一个 OAuth2 的 Swift 实现。
这个库是重量级的,它的灵感来自于SwiftOAuth2 repository from
crousselle。
AlamofireOauth2 依赖于 Alamofire, and
KeychainAccess 。
AlamofireOauth2 官网
https://github.com/evermeer/AlamofireOauth2
android-使用OAuth2安全认证移动访问的选项
我们目前正在实施OAuth2以保护我们的新API的安全,并且不确定如何安全地提供所需的功能.我们需要允许来自移动设备的以下内容:
Immediately after downloading the app the user is able to take a picture and submit it without having to first log in.
虽然我们希望允许匿名用户访问,而用户无需登录或注册即可使用某些功能,但我们不想允许未经身份验证的API访问.通常使用client credentials authorization flow获取和访问应用令牌可以完成此操作,但是这需要知道客户端密码.根据我的阅读,移动设备不被视为受信任的客户端,并且不应包含客户端机密,因此不应自行生成应用程序访问令牌.
我们提出了一些选项来满足此要求,但希望对此提供一些输入:
>将客户端密码嵌入到应用程序中.从安全角度来看似乎并不理想,但也许我们缺少一种明显的安全方法?我们的目标至少是iOS和Android.
>离线生成应用访问令牌,并将其嵌入到应用中.仍然不是很安全,但是至少没有公开秘密.
>允许仅使用客户端ID而不是访问令牌来访问某些功能.这可能是最简单的,但是它引入了不一致,并且需要多种方式来验证客户端.
>构建并使用随播网络应用为移动应用生成应用访问令牌.从表面上看似乎是一个赢家,但现在您必须确保可以访问该配套应用程序!
您如何在不要求用户先登录的情况下使用OAuth2从移动设备安全地验证对API的访问?
解决方法:
同意对Q的评论.
1.)在OAuth 2中使用“客户端凭据”授予类型-在您的应用程序中包含嵌入式机密.了解这不是超级安全,最终有人会对其进行逆向工程.理想情况下,每个客户端都会获得一个唯一的秘密-因此,如果滥用客户端,您可以撤消该客户端.
2.)在开放该API的情况下运行-从而完全不需要OAuth 2访问令牌.也许该API仅会为您的应用所知-但是,再次有人对它进行反向工程只是时间问题.
angular-oauth2 —— NG 的 OAuth2 认证模块
angular-oauth2 是 AngularJS 的 OAuth2 认证模块,使用 ES6 编写。
Discord OAuth2 - OAuth2 URL 链接之间有什么区别?
文档对此进行了解释。
来自文档:
授权代码授予是大多数开发人员将其视为“标准 OAuth2”的内容,涉及检索访问代码并将其交换为用户的访问令牌。它允许授权服务器充当客户端和资源所有者之间的中介,因此永远不会直接与客户端共享资源所有者的凭据。
https://discord.com/api/oauth2/authorize
链接用于由用户/资源所有者授权您的应用程序。这给了你一个代码。您使用带有 https://discord.com/api/oauth2/token
的第二个链接的代码来获取您将访问用户/资源所有者的内容的令牌
今天关于方法级别的#oauth2安全表达式的介绍到此结束,谢谢您的阅读,有关AlamofireOauth2 OAuth2 的 Swift 实现、android-使用OAuth2安全认证移动访问的选项、angular-oauth2 —— NG 的 OAuth2 认证模块、Discord OAuth2 - OAuth2 URL 链接之间有什么区别?等更多相关知识的信息可以在本站进行查询。
本文标签: