当前位置: 首页 > news >正文

建网站一条龙国内最新重大新闻

建网站一条龙,国内最新重大新闻,网站建设维护保密协议,网站备案信息查询接口目录 1. OAuth2.0 简介 2. 代码搭建 2.1 认证中心(8080端口) 2.2 资源服务中心(8081端口) 3. 测试结果 1. OAuth2.0 简介 OAuth 2.0(开放授权 2.0)是一个开放标准,用于授权第三方应用程序…

目录

1. OAuth2.0 简介

2. 代码搭建 

2.1 认证中心(8080端口)

2.2 资源服务中心(8081端口)

3. 测试结果


1. OAuth2.0 简介

OAuth 2.0(开放授权 2.0)是一个开放标准,用于授权第三方应用程序访问用户在资源所有者(用户)的帐户上存储的受保护资源,而无需共享用户凭据。OAuth 2.0 主要用于在互联网上安全地委托授权,广泛应用于身份验证和授权场景。

以下是 OAuth 2.0 的核心概念和流程:

  1. 角色:

    • 资源所有者(Resource Owner): 拥有受保护资源的用户。
    • 客户端(Client): 第三方应用程序,希望访问资源所有者的受保护资源。
    • 授权服务器(Authorization Server): 负责验证资源所有者并颁发访问令牌的服务器。
    • 资源服务器(Resource Server): 存储受保护资源的服务器,它可以与授权服务器相同,也可以是不同的服务器。
  2. 授权类型:OAuth2.0协议一共支持 4 种不同的授权模式:

                授权码模式:常见的第三方平台登录功能基本都是使用这种模式。

                简化模式:简化模式是不需要客户端服务器参与,直接在浏览器中向授权服务器申请令牌(token),一般如果网站是纯静态页面则可以采用这种方式。

                密码模式:密码模式是用户把用户名密码直接告诉客户端,客户端使用说这些信息向授权服务器申请令牌(token)。这需要用户对客户端高度信任,例如客户端应用和服务提供商就是同一家公司,自己做前后端分离登录就可以采用这种模式。

        

                客户端模式:客户端模式是指客户端使用自己的名义而不是用户的名义向服务提供者申请授权,严格来说,客户端模式并不能算作 OAuth 协议要解决的问题的一种解决方案,但是,对于开发者而言,在一些前后端分离应用或者为移动端提供的认证授权服务器上使用这种模式还是非常方便的。

2. 代码搭建 

2.1 认证中心(8080端口)

导入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId><version>2.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId><version>2.2.5.RELEASE</version></dependency></dependencies>

只需要添加两个配置类即可

MyAuthorizationConfig类

@Configuration
@EnableAuthorizationServer
public class MyAuthorizationConfig extends AuthorizationServerConfigurerAdapter {/*** 客户端存储策略,这里使用内存方式,后续可以存储在数据库*/@Autowiredprivate ClientDetailsService clientDetailsService;/*** Security的认证管理器,密码模式需要用到*/@Autowiredprivate AuthenticationManager authenticationManager;/*** 配置令牌访问的安全约束*/@Overridepublic void configure(AuthorizationServerSecurityConfigurer security) throws Exception {security//开启/oauth/token_key验证端口权限访问.tokenKeyAccess("permitAll()")//开启/oauth/check_token验证端口认证权限访问.checkTokenAccess("permitAll()")//表示支持 client_id 和 client_secret 做登录认证.allowFormAuthenticationForClients();}//配置客户端@Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {//内存模式clients.inMemory()//客户端id.withClient("test")//客户端秘钥.secret(new BCryptPasswordEncoder().encode("123456"))//资源id,唯一,比如订单服务作为一个资源,可以设置多个.resourceIds("order")//授权模式,总共四种,1. authorization_code(授权码模式)、password(密码模式)、client_credentials(客户端模式)、implicit(简化模式)//refresh_token并不是授权模式,.authorizedGrantTypes("authorization_code","password","client_credentials","implicit","refresh_token")//允许的授权范围,客户端的权限,这里的all只是一种标识,可以自定义,为了后续的资源服务进行权限控制.scopes("all")//false 则跳转到授权页面.autoApprove(false)//授权码模式的回调地址.redirectUris("http://www.baidu.com"); //可以and继续添加客户端}/*** 令牌存储策略*/@Beanpublic TokenStore tokenStore(){return new InMemoryTokenStore();}@Beanpublic AuthorizationServerTokenServices tokenServices() {DefaultTokenServices services = new DefaultTokenServices();//客户端端配置策略services.setClientDetailsService(clientDetailsService);//支持令牌的刷新services.setSupportRefreshToken(true);//令牌服务services.setTokenStore(tokenStore());//access_token的过期时间services.setAccessTokenValiditySeconds(60 * 60 * 2);//refresh_token的过期时间services.setRefreshTokenValiditySeconds(60 * 60 * 24 * 3);return services;}/*** 授权码模式的service,使用授权码模式authorization_code必须注入*/@Beanpublic AuthorizationCodeServices authorizationCodeServices() {//授权码存在内存中return new InMemoryAuthorizationCodeServices();}/*** 配置令牌访问的端点*/@Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {endpoints//授权码模式所需要的authorizationCodeServices.authorizationCodeServices(authorizationCodeServices())//密码模式所需要的authenticationManager.authenticationManager(authenticationManager)//令牌管理服务,无论哪种模式都需要.tokenServices(tokenServices())//只允许POST提交访问令牌,uri:/oauth/token.allowedTokenEndpointRequestMethods(HttpMethod.POST);}
}

SecurityConfig类

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {/*** 加密算法*/@BeanPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Overrideprotected void configure(HttpSecurity http) throws Exception {//todo 允许表单登录http.authorizeRequests().anyRequest().authenticated().and().formLogin().loginProcessingUrl("/login").permitAll().and().csrf().disable();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {//从内存中加载用户,实际生产中需要从数据库中加载auth.inMemoryAuthentication().withUser("admin").password(new BCryptPasswordEncoder().encode("123456")).roles("admin");//后面可以跟and连接}/*** AuthenticationManager对象在OAuth2认证服务中要使用,提前放入IOC容器中* Oauth的密码模式需要*/@Override@Beanpublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();}
}

2.2 资源服务中心(8081端口)

导入依赖和认证中心相同,添加一个配置类ResourceServerConfig

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {/*** 配置令牌校验服务,客户端携带令牌访问资源,作为资源端必须检验令牌的真伪* TODO 使用JWT作为TOKEN则不必远程调用check_token校验*/@Beanpublic RemoteTokenServices tokenServices() {//远程调用授权服务的check_token进行令牌的校验RemoteTokenServices services = new RemoteTokenServices();// /oauth/check_token 这个url是认证中心校验的token的端点services.setCheckTokenEndpointUrl("http://localhost:8080/oauth/check_token");//客户端的唯一idservices.setClientId("test");//客户端的秘钥services.setClientSecret("123456");return services;}/*** 配置资源id和令牌校验服务*/@Overridepublic void configure(ResourceServerSecurityConfigurer resources)  {//配置唯一资源idresources.resourceId("order")//配置令牌校验服务.tokenServices(tokenServices());}/*** 配置security的安全机制*/@Overridepublic void configure(HttpSecurity http) throws Exception {//#oauth2.hasScope()校验客户端的权限,这个all是在客户端中的scopehttp.authorizeRequests().antMatchers("/**").access("#oauth2.hasScope('all')").anyRequest().authenticated();}
}

测试接口

@RestController
public class TestController {@GetMapping("/test")public String hello() {return "hello world";}
}

3. 测试结果

访问http://localhost:8080/oauth/authorize?client_id=test&response_type=code&scope=all&redirect_uri=http://www.baidu.com

登录,账号admin,密码123456,然后获取授权码

获取令牌

 

访问资源中心

 未携带令牌测试结果

携带令牌测试结果

 

http://www.yayakq.cn/news/463508/

相关文章:

  • 新会住房建设局网站浏览器地址栏怎么打开
  • 邯郸网站建设服务报价wordpress空页面模板
  • 佛山专业做网站公司旅游网站建设策划方案书
  • 如何做自己的加盟网站旅游业网站开发建设
  • 程序开发 网站开发小红书seo排名帝搜软件
  • 合肥网站建设公潍坊网页推广制作
  • 三里屯网站建设东莞网站建设报价 一呼百应
  • 创建网站用突唯阿做响应式网站H5网站建设网站定制开发
  • wordpress 建站主题百度搜索链接入口
  • wamp做网站动态效果的网站建设
  • 郑州做装饰的网站创业平台是什么意思
  • 梅州市网站制作部门网站 法规制度 建设情况
  • 做房产买卖哪些网站可以获客军事最新军事新闻视频
  • php代码删除网站个人做视频网站视频储存
  • 成都网站建设技巧网站开发学什么数据库
  • html网站模板 免费织梦网站数据下载
  • expedia电子商务网站建设网络架构中sdn是指
  • 网站内容编辑西安网站制作资源
  • 公司网站建设合作协议wordpress如何添加百度地图
  • 怎么在本机做网站iis配置wordpress
  • 企业网站推广在哪里办广告传媒公司营业执照经营范围
  • django做网站效率高吗百度官网网页版
  • wordpress 导出导入文章网站服务器怎么优化
  • 怎么评判一个网站做的好与坏免费h5生成网站
  • asp网站后台无法编辑深圳积分商城网站制作
  • 青岛知名网站建设承德项目网
  • 网站运营的工作内容响应式电影资讯网站
  • 南宁百度网站建设公司茂名公司制作网站
  • 苏州高端网站制作官网表白网页生成器软件
  • 全国政务网站哪家做的好网站建设手机站