`
yangyongByJava
  • 浏览: 127228 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring-security-oauth2.0认证

阅读更多

 

spring-security-oauth认证流程主要分为以下几步:

 

1、xml文件中配置拦截oauth认证的请求地址,如下所示

<!-- OAuth 2  Authorize-->

<!-- 拦截所有以oauth开头的请求,若访问用户没有权限,则默认跳转到/oauth/oauth_login请求中,进行登录,登录过程中进行用户名和密码等信息的匹配由 

oauthAuthenticationManager认证管理器处理-->

<sec:http pattern="/oauth/**" access-denied-page="/oauth/oauth_login" 

           authentication-manager-ref="oauthAuthenticationManager">

<sec:intercept-url pattern="/oauth/authorize"

OAuth认证请求地址

                      access="IS_AUTHENTICATED_ANONYMOUSLY"/>

<!--处理登录请求的配置 -->

 <sec:form-login authentication-failure-url="/oauth/login"

登录失败的默认请求地址

                   default-target-url="/index"

登录成功的地址  

                   login-page="/oauth/login"

登录请求的地址   

                   login-processing-url="/oauth/oauthLogin.do"

点击登录按钮时的请求地址,只需将form表单的action置为此值即可,无需自己写请求处理的代码

  />

</sec:http>

<!--通过用户名和密码查询用户的认证管理器 -->

<sec:authentication-manager id="oauthAuthenticationManager">

      <sec:authentication-provider ref="oauthDbAuthenticationProvider"/>

</sec:authentication-manager>

<!--真正查询数据库并进行登录验证的地方 -->

<bean id="oauthDbAuthenticationProvider" class="xxx.xx.xxx.OauthDbAuthenticationProvider" />

如果浏览器发送一个诸如如下请求地址(OAuth2.0认证时,这些参数必须存在)

/oauth/authorize?client_id=&response_type=&redirect_uri=&scope=%s请求时,首先查看xml文件中是否有配置对该请求的拦截,若有配置,则spring-security框架内部会进行处理,将请求的参数组装成一个DefaultSavedRequest对象,并"SPRING_SECURITY_SAVED_REQUEST"为键,保存在session域中。当登录成功后,spring-security-oauth框架会根据session中是否存在DefaultSavedRequest对象而将请求发送到不同地方。如果存在DefaultSavedRequest对象,则配置的 default-target-url="/index"的值将无效,此时的目标页面将是/oauth/authorize地址。

@Controller

@SessionAttributes(types = AuthorizationRequest.class)

@RequestMapping("/oauth/authorize")

public class AuthorizationEndpoint extends AbstractEndpoint    

                                          implements InitializingBean {

@RequestMapping(params = "response_type")

public ModelAndView authorize(Map<String,Object> model,    

                     @RequestParam("response_type")String responseType,

Code或token

    @RequestParam Map<String,String> parameters

                    SessionStatus sessionStatus, Principal principal) {

   if(!(principal instanceof Authentication) || !((Authentication)    

         principal).isAuthenticated()) {

sessionStatus.setComplete(); 

//出现异常时,自动跳入登录页面

throw new InsufficientAuthenticationException("");

    }

  }

用户登录成功后,下一步就是授权

//进入用户授权页面后的请求地址

@RequestMapping(method=RequestMethod.POST,params=APPROVAL)

Public View approveOrDeny(@RequestParam(APPROVALboolean approved,

     @ModelAttribute AuthorizationRequest authorizationRequest,  

         SessionStatus sessionStatus, Principal principal) {

     if(authorizationRequest.getClientId() == null) {

sessionStatus.setComplete();

throw new InvalidClientException("");

}

if(!(principal instanceof Authentication)) {

sessionStatus.setComplete();

throw new InsufficientAuthenticationException("");

}

try {

Set<String> responseTypes=authorizationRequest.getResponseTypes();

authorizationRequest = resolveRedirectUri(authorizationRequest);

if(responseTypes.contains("token")) {

return getImplicitGrantResponse(authorizationRequest.approved

(true)).getView();

}

return getAuthorizationCodeResponse(authorizationRequest.approved

    (approved), (Authentication) principal);

finally {

sessionStatus.setComplete();

}

OAuth认证成功后,紧接着就是用服务器返回的code码获取accessToken对象(response_type=code)为例。获取token的请求地址为"/oauth/token"实现类是TokenEndpointspring-security-oauth支持4种获取token的方式,分别为:

Passwordauthorization_coderefresh_tokenimplicit框架会根据用户传递的grant_type值,采用对应的方式获取token。值得注意的是,获取token的方式,需在xml文件中配置,如下所示:

<oauth:authorization-server client-details-service-ref="clientDetails" 

    token-services-ref="tokenServices">

<oauth:authorization-code />

   <oauth:implicit />

   <oauth:refresh-token />

   <oauth:client-credentials />

   <oauth:password authentication-manager-ref="oauthAuthenticationManager"/>

</oauth:authorization-server>

 

 

分享到:
评论
5 楼 bing_it 2015-09-24  
4 楼 鬼道行者 2014-03-14  
authorizationRequest.approved(true) 会报错哦,错误提示没有指定的方法approved(true)。
3 楼 鬼道行者 2014-03-14  
APPROVAL  是哪里来的啊?
2 楼 wqp310520 2013-11-18  
给个DEMO啊
1 楼 pttaag 2013-06-26  
我去,怎么没人顶你啊,杨先生

相关推荐

    spring-security-oauth2-2.0.3.jar(包括jar包,源码,doc)

    Spring Security OAuth2提供了对这些角色的支持,包括认证流程、令牌管理、权限范围定义等功能。它还与Spring Security的其他模块无缝集成,可以与其他安全机制如用户名/密码认证、JWT令牌等配合使用。 在实际项目...

    spring security oauth2.0 (讲义+代码)

    总而言之,通过学习Spring Security OAuth2.0,开发者能够掌握一套完整的认证授权解决方案,从而为Web应用和API提供安全的访问控制。这个讲义结合代码的实践学习将帮助你深入理解并熟练运用这些概念。

    Spring Security OAuth2.0学习笔记.zip

    Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...

    Spring Security Oauth2.0认证授权专题

    Spring boot+Spring Security Oauth2.0,Sprint cloud+Spring Security Oauth2集成。四种认证方式。附带有代码,和案例,案例,还有视频链接。我保证看完就回,如果视频链接失效,评论回复我,我单独再给你一份。

    spring security + oauth 2.0 实现单点登录、认证授权

    Spring Security和OAuth 2.0是两个在Web应用安全领域广泛应用的框架,它们结合使用可以构建强大的单点登录(SSO)和认证授权系统。在这个系统中,`xp-sso-server`代表了认证服务器,而`xp-sso-client-a`和`xp-sso-...

    Spring Cloud Alibaba 集成 Spring Security OAuth2.0 实现认证和授权

    分布式系统的认证和授权 分布式架构采用 Spring Cloud Alibaba 认证和授权采用 Spring Security OAuth2.0 实现方法级权限控制 网关采用 gateway 中间件 服务注册和发现采用 nacos

    Spring-Security-OAuth2.0

    Spring-Security-OAuth2.0,采用SpringBoot + SpringSecurityOAuth2,有完整的示例文档及调用示例,包括授权码模式(authorization code)、简化模式(implicit)、密码模式(password)、客户端模式(client_...

    资料-Spring Security Oauth2.0认证授权专题.rar

    总结起来,Spring Security Oauth2.0专题涵盖了如何使用Spring Security构建安全的OAuth2.0认证和授权系统,包括授权服务器、资源服务器的配置,以及客户端的交互。通过学习这个专题,开发者可以有效地保护Web应用的...

    基于springcloud+security+oauth2.0实现的权限管理系统.zip

    《基于SpringCloud+Security+OAuth2.0的权限管理系统实现详解》 在现代企业级应用开发中,权限管理和安全控制是至关重要的组成部分。本系统基于SpringCloud、Security和OAuth2.0三大技术栈构建,旨在提供一个高效、...

    视频配套笔记_Spring Security OAuth2.0认证授权_v1.1.rar

    这个压缩包文件"视频配套笔记_Spring Security OAuth2.0认证授权_v1.1.rar"包含了对这一主题的详细解释和实例代码,旨在帮助开发者深入理解和应用OAuth2.0与Spring Security的集成。 首先,Spring Security是Spring...

    spring security 基于oauth 2.0 实现 sso 单点登录Demo.zip

    spring security 基于oauth 2.0 实现 sso 单点登录Demo 使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth

    spring cloud + vue + oAuth2.0全家桶实战

    spring cloud + vue + oAuth2.0全家桶实战,前后端分离模拟商城,完整的购物流程、后端运营平台,可以实现快速搭建企业级微服务项目 核心框架:springcloud Edgware全家桶 安全框架:Spring Security Spring Cloud ...

    spring-security-oauth2文档

    Spring Security OAuth2 Boot 2.6.8作为Spring Security OAuth2支持的最后一个版本,为开发者提供了在Spring Boot项目中实现OAuth2认证授权功能的便捷途径。通过合理的依赖管理和配置,可以快速构建出安全可靠的授权...

    spring security oauth2.0 需要的基础 sql 文件

    spring security oauth2.0 需要的基础 sql 文件

    Spring security oauth源码

    Spring Security OAuth 是一个用于保护RESTful Web服务的框架,它为OAuth 1.0a和OAuth 2.0协议提供了全面的支持。在这个源码中,我们可能会看到如何将Spring Security与OAuth结合,以构建安全的Web应用程序和服务。...

    完整Oauth 2.0实现实例

    - 使用 Spring Security OAuth2 框架,它可以简化 OAuth 2.0 的实现。首先,你需要在项目中引入相关依赖。 - 配置授权服务器,定义客户端详情,包括客户端ID、客户端秘密、授权类型等。 - 创建数据库表,用于存储...

    OAuth2.0 使用到的jar包

    在实际开发中,根据所选择的OAuth2.0实现,你可能还需要引入其他依赖,如Spring Boot的自动配置支持,数据库连接池,或者其他与认证和授权相关的库。确保正确配置这些jar包,并遵循OAuth2.0的规范,可以构建出安全且...

    spring-security-oauth-test.rar

    在本项目中,"spring-security-oauth-test.rar"是一个压缩包,它包含了使用SpringCloud、Spring Security和OAuth2.0实现的权限认证解决方案。这个项目旨在演示如何在微服务架构中构建安全的API访问控制,同时利用...

    springboot集成oauth2.0

    在"spring-security-oauth2-example-master"这个项目中,你可以找到一个完整的SpringBoot集成OAuth2.0的示例,包括配置、控制器、服务以及客户端的实现,通过学习和研究该项目,可以更好地理解上述知识点,并实际...

Global site tag (gtag.js) - Google Analytics