GVKun编程网logo

方法级别的#oauth2安全表达式

14

以上就是给各位分享方法级别的#oauth2安全表达式,同时本文还将给你拓展AlamofireOauth2OAuth2的Swift实现、android-使用OAuth2安全认证移动访问的选项、angul

以上就是给各位分享方法级别的#oauth2安全表达式,同时本文还将给你拓展AlamofireOauth2 OAuth2 的 Swift 实现、android-使用OAuth2安全认证移动访问的选项、angular-oauth2 —— NG 的 OAuth2 认证模块、Discord OAuth2 - OAuth2 URL 链接之间有什么区别?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

方法级别的#oauth2安全表达式

方法级别的#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 OAuth2 的 Swift 实现

AlamofireOauth2 介绍

AlamofireOauth2 是一个 OAuth2 的 Swift 实现。

这个库是重量级的,它的灵感来自于SwiftOAuth2 repository from
crousselle

AlamofireOauth2 依赖于 Alamofire, and
KeychainAccess 。

AlamofireOauth2 官网

https://github.com/evermeer/AlamofireOauth2

android-使用OAuth2安全认证移动访问的选项

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 —— NG 的 OAuth2 认证模块

angular-oauth2 是 AngularJS 的 OAuth2 认证模块,使用 ES6 编写。

Discord OAuth2 - OAuth2 URL 链接之间有什么区别?

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 链接之间有什么区别?等更多相关知识的信息可以在本站进行查询。

本文标签: