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(APPROVAL) boolean 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",实现类是TokenEndpoint,spring-security-oauth支持4种获取token的方式,分别为:
Password、authorization_code、refresh_token、implicit。框架会根据用户传递的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>
相关推荐
Spring Security OAuth2提供了对这些角色的支持,包括认证流程、令牌管理、权限范围定义等功能。它还与Spring Security的其他模块无缝集成,可以与其他安全机制如用户名/密码认证、JWT令牌等配合使用。 在实际项目...
总而言之,通过学习Spring Security OAuth2.0,开发者能够掌握一套完整的认证授权解决方案,从而为Web应用和API提供安全的访问控制。这个讲义结合代码的实践学习将帮助你深入理解并熟练运用这些概念。
Spring Security OAuth2.0学习笔记 什么是认证、授权、会话。 Java Servlet为支持http会话做了哪些事儿。 基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring ...
Spring boot+Spring Security Oauth2.0,Sprint cloud+Spring Security Oauth2集成。四种认证方式。附带有代码,和案例,案例,还有视频链接。我保证看完就回,如果视频链接失效,评论回复我,我单独再给你一份。
Spring Security和OAuth 2.0是两个在Web应用安全领域广泛应用的框架,它们结合使用可以构建强大的单点登录(SSO)和认证授权系统。在这个系统中,`xp-sso-server`代表了认证服务器,而`xp-sso-client-a`和`xp-sso-...
分布式系统的认证和授权 分布式架构采用 Spring Cloud Alibaba 认证和授权采用 Spring Security OAuth2.0 实现方法级权限控制 网关采用 gateway 中间件 服务注册和发现采用 nacos
Spring-Security-OAuth2.0,采用SpringBoot + SpringSecurityOAuth2,有完整的示例文档及调用示例,包括授权码模式(authorization code)、简化模式(implicit)、密码模式(password)、客户端模式(client_...
总结起来,Spring Security Oauth2.0专题涵盖了如何使用Spring Security构建安全的OAuth2.0认证和授权系统,包括授权服务器、资源服务器的配置,以及客户端的交互。通过学习这个专题,开发者可以有效地保护Web应用的...
《基于SpringCloud+Security+OAuth2.0的权限管理系统实现详解》 在现代企业级应用开发中,权限管理和安全控制是至关重要的组成部分。本系统基于SpringCloud、Security和OAuth2.0三大技术栈构建,旨在提供一个高效、...
这个压缩包文件"视频配套笔记_Spring Security OAuth2.0认证授权_v1.1.rar"包含了对这一主题的详细解释和实例代码,旨在帮助开发者深入理解和应用OAuth2.0与Spring Security的集成。 首先,Spring Security是Spring...
在本项目中,通过集成Spring Security OAuth2,我们可以实现用户的认证和授权流程。用户可以通过微信等第三方账号登录,简化注册和登录步骤,提升用户体验。同时,OAuth2.0的令牌(Token)机制确保了数据传输的安全...
spring security 基于oauth 2.0 实现 sso 单点登录Demo 使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth
Spring Security OAuth2 Boot 2.6.8作为Spring Security OAuth2支持的最后一个版本,为开发者提供了在Spring Boot项目中实现OAuth2认证授权功能的便捷途径。通过合理的依赖管理和配置,可以快速构建出安全可靠的授权...
spring security oauth2.0 需要的基础 sql 文件
Spring Security OAuth 是一个用于保护RESTful Web服务的框架,它为OAuth 1.0a和OAuth 2.0协议提供了全面的支持。在这个源码中,我们可能会看到如何将Spring Security与OAuth结合,以构建安全的Web应用程序和服务。...
- 使用 Spring Security OAuth2 框架,它可以简化 OAuth 2.0 的实现。首先,你需要在项目中引入相关依赖。 - 配置授权服务器,定义客户端详情,包括客户端ID、客户端秘密、授权类型等。 - 创建数据库表,用于存储...
在实际开发中,根据所选择的OAuth2.0实现,你可能还需要引入其他依赖,如Spring Boot的自动配置支持,数据库连接池,或者其他与认证和授权相关的库。确保正确配置这些jar包,并遵循OAuth2.0的规范,可以构建出安全且...
在这个OAuth2.0实现中,它将定义项目依赖,如Spring Security OAuth2库,用于处理OAuth2.0协议的各个步骤。可能的依赖包括`spring-security-oauth2`, `spring-web`, `spring-security-core`, `spring-security-...
在本项目中,"spring-security-oauth-test.rar"是一个压缩包,它包含了使用SpringCloud、Spring Security和OAuth2.0实现的权限认证解决方案。这个项目旨在演示如何在微服务架构中构建安全的API访问控制,同时利用...