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

潍坊做外贸网站建设微商网站模板

潍坊做外贸网站建设,微商网站模板,wordpress会员分销,建设网站的申请信用卡分期付款文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 … 文章目录 一.OAuth2.0协议介绍二.设计来源于生活三.关于令牌与密码的区别四.应用场景五.接下来分别简单介绍下四种授权模式吧1.客户端模式1.1 介绍1.2 适用场景1.3 时序图 2.密码模式2.1 介绍2.2 适用场景2.3时序图 3.授权码模式3.1 介绍3.2 适用场景3.3 时序图 4.简化模式4.1 介绍4.2 适用场景4.3 时序图 5. token刷新模式5.1 介绍5.2 适用场景5.3 时序图 六.关键配置说明1.认证服务器配置类2.资源服务器配置类 七.简单测试八.小结 一.OAuth2.0协议介绍 ‌OAuth 2.0是一种开放标准的授权协议‌设计用于授权一个第三方应用访问用户在另一个应用程序中的受保护资源而无需提供用户名和密码。这种协议允许用户安全地分享他们的数据资源同时保持对其数据的控制。OAuth 2.0在现代互联网应用中被广泛使用例如我们的微信开放平台微博开发平台都能常见OAuth2.0的身影。 协议特点 简单不管是OAuth服务提供者还是应用开发者都很易于理解与使用安全没有涉及到用户密钥等信息更安全更灵活开放任何服务提供商都可以实现OAuth任何软件开发商都可以使用OAuth 二.设计来源于生活 之前看到过一篇文章介绍的生活场景可以方便大家理解。 快递员问题 比如咱们住在一个小区里面小区有门禁系统进入小区我们作为业主也需要输入账号密码、或者刷卡来确认业主身份无误才能进入。但是我们平常点外卖、网购。每天都有快递员来送货他们没有我们业主的账号密码进不来小区但是我又不想专门跑到门禁处去拿所以我必须找到一个办法让快递员通过门禁系统进入小区交到我手里。如果我把自己的密码告诉快递员他就拥有了与我同样的权限这样好像不太合适。万一我想取消他进入小区的权力也很麻烦我自己的密码也得跟着改了还得通知其他的快递员。有没有一种办法让快递员能够自由进入小区又不必知道小区居民的密码而且他的唯一权限就是送货其他需要密码的场合他都没有权限 于是就有了咱们的OAuth2.0开放标准授权协议。授权服务器(门禁系统) 授权一个第三方应用(快递员、外卖员等等) 访问用户(资源所有者)在资源服务器(小区内)的资源比如进入小区的权利。 基于OAuth2.0开发标准协议咱们的门禁系统也升级了 在门禁系统那里加了个申请授权按钮快递员/外卖员 可以输入他的工号(提前在我们这边备案了我们知道他编号的正确性)然后按这个按钮去申请授权。他按下申请授权按钮以后业主也就是我的手机就会跳出对话框有人正在要求授权并附带显示该快递员的姓名、工号和所属的快递公司我确认没问题就点击确认授权按钮.门禁系统知道我同意给予他进入小区的授权,向快递员显示一个进入小区的令牌access token。令牌就是类似密码的一串数字只在一定时期内有效。快递员向门禁系统输入令牌进入小区从而就可以把快递或者外卖交到我手里啦 有人可能会问为什么不是远程为快递员开门而要为他单独生成一个令牌这是因为快递员可能每天都会来送货第二天他还可以复用这个令牌。另外假如小区有多重门禁快递员可以使用同一个令牌通过它们。 三.关于令牌与密码的区别 令牌token与密码password的作用是一样的都可以进入系统但是有三点差异。 1令牌是短期的到期会自动失效用户自己无法修改。密码一般长期有效用户不修改就不会发生变化。 2令牌可以被数据所有者撤销会立即失效。以上例而言屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。 3令牌有权限范围scope比如只能进小区的二号门。对于网络服务来说只读令牌就比读写令牌更安全。密码一般是完整权限。 上面这些设计保证了令牌既可以让第三方应用获得权限同时又随时可控不会危及系统安全。这就是 OAuth 2.0 的优点 注意只要知道了令牌就能进入系统。系统一般不会再次确认身份所以令牌必须保密泄漏令牌与泄漏密码的后果是一样的。 这也是为什么令牌的有效期一般都设置得很短的原因 OAuth 2.0 对于如何颁发令牌的细节规定得非常详细。 有四种方式进行授权客户端模式、密码模式、授权码模式、简化模式也叫隐式模式。 四.应用场景 OAuth 2.0 在许多不同的应用场景中都能够发挥作用尤其是那些涉及到第三方应用程序访问用户数据或资源的情况。 以下是一些常见的 OAuth 2.0 应用场景 比如我们京东商城通过微信授权方式登录获取微信用户信息等等。社交媒体登录许多网站和应用程序允许用户使用其社交媒体账户如Facebook、Google、Twitter等进行登录。OAuth2.0 可以用于授权第三方应用访问用户的社交媒体数据如好友列表、社交活动等。第三方应用集成用户可能使用多个不同的应用和服务例如电子邮件、日历、云存储等。OAuth 2.0可以用于实现单一的登录授权使用户能够在多个应用之间共享数据而无需在每个应用中都输入凭证。医疗保健应用在医疗保健领域患者的健康数据可能由多个医疗应用和机构共享。OAuth 2.0可以用于确保授权的数据访问同时保护患者隐私。 这些只是 OAuth 2.0 可能应用的一些例子。基本上任何需要实现安全的第三方应用程序访问用户数据或资源的情况下OAuth 2.0 都可能是一个合适的解决方案。 五.接下来分别简单介绍下四种授权模式吧 1.客户端模式 1.1 介绍 客户端模式Client Credentials Grant指客户端以自己的名义而不是以用户的名义向服务提供商进行授权。客户端模式是安全级别最低而且要求授权服务器对客户高度信任的模式因为客户端向授权服务器请求认证授权的过程中至始至终都没有用户的参与未经过用户允许客户端凭提供自己在授权服务器注册的信息即可在授权服务器完成认证授权而客户端获得认证授权以后则拥有从资源服务器操作用户数据的权限。 1.2 适用场景 这种模式一般应用于公司内部系统或者有着高度保密责任的合作伙伴之间的对接。 1.3 时序图 客户端首先在认证服务器注册好客户端信息。认证服务器存储维护客户端信息。客户端带上client_id、client_secret、grant_type写死client_credentials等参数向认证服务器发起获取token 请求。认证服务器校验客户端信息校验通过则发放令牌access_token校验失败则返回异常信息。客户端成功获取到令牌access_token后就可以带着令牌去访问资源服务器了。 2.密码模式 2.1 介绍 如果你高度信任某个应用也允许用户把用户名和密码直接告诉该应用。该应用就使用你的密码申请令牌这种方式称为密码模式password。 密码模式是一种安全级别较低而且要求资源拥有者用户完全信任客户端的模式该模式可以理解为在客户端模式的基础上增加了对用户的账号、密码在认证服务器进行校验的操作是客户端代理用户的操作。在 OAuth 2.1 中密码模式已经被废除在第三方平台上使用密码模式对于用户来说是一种非常不安全的行为假设某平台客户端支持 QQ 登录用户使用自己 QQ 的账号、密码在该平台上输入进行登录则该平台将拥有用户 QQ 的账号、密码对于用户来说将自己 QQ 的账号、密码提供给第三方平台这种行为是非常不安全的。 2.2 适用场景 密码模式一般适合应用在自己公司内部使用的系统和自己公司的 app 产品:例如一些 ERP、CRM、WMS 系统因为都是自己公司的产品这种情况下就不存在用户提供账号、密码给第三方客户端进行代理登录的情形了。 2.3时序图 1客户端首先在认证服务器注册好客户端信息。 2认证服务器存储维护客户端信息。 3用户提供认证平台的账号、密码给客户端这里的客户端可以是浏览器、APP、第三方应用的服务器。 4客户端带上 client_id、client_secret、grant_type写死password、username、password 等参数向认证服务器发起获取 token 请求。 5认证服务器校验客户端信息校验失败则返回异常信息,校验通过则往下继续校验用户验账号、密码。 6认证服务器校验用户账号、密码校验通过则发放令牌access_token校验失败则返回异常信息。 7客户端成功获取到令牌access_token后就可以带着令牌去访问资源服务器了。 3.授权码模式 3.1 介绍 授权码authorization code方式指的是第三方应用先申请一个授权码然后再用该授权码获取令牌。 授权码模式是 OAuth 2.0 协议中安全级别最高的一种认证模式他与密码模式一样都需要使用到用户的账号信息在认证平台的登录操作但有所不同的是密码模式是要求用户直接将自己在认证平台的账号、密码提供给第三方应用客户端由第三方平台进行代理用户在认证平台的登录操作而授权码模式则是用户在认证平台提供的界面进行登录然后通过用户确认授权后才将一次性授权码提供给第三方应用第三方应用拿到一次性授权码以后才去认证平台获取 token。 3.2 适用场景 目前市面上主流的第三方验证都是采用这种模式比如微信授权京东登录微信授权某app登录凡是设计第三方授权的基本都是采用这种模式。 3.3 时序图 1客户端首先在认证服务器注册好客户端信息。 2认证服务器存储维护客户端信息。 3用户在客户端上发起登录。 4向认证服务器发起认证授权请求例如http://localhost:9000/auth/oauth/authorize?client_idxxxresponse_typecodescopemessage.readredirect_urihttp://www.baidu.com注意此时参数不需要client_secret。 5认证服务器带上客户端参数将操作引导至用户授权确认页面用户在该页面进行授权确认操作。 6用户在授权页面选择授权范围点击确认提交则带上客户端参数和用户授权范围向认证服务器获取授权码。注意此处操作已经脱离了客户端。 7认证服务器校验客户端信息和授权范围因为客户端在认证平台注册的时候注册信息包含授权范围如果用户选择的授权范围不在注册信息包含的范围内则将因权限不足返回失败。 8校验通过将授权码拼接到客户端注册的回调地址返回给客户端。 9客户端拿到认证服务器返回的授权码后带上客户端信息和授权码向认证服务器换取令牌access_token。 10认证服务器校验授权码是否有效如果有效则返回令牌access_token如果无效则返回异常信息。 11客户端成功获取到令牌access_token后就可以带着令牌去访问资源服务器了。 4.简化模式 4.1 介绍 简化模式也叫隐式模式是相对于授权码模式而言的对授权码模式的交互做了一下简化省去了客户端使用授权码去认证服务器换取令牌access_token的操作即用户在代理页面选择授权范围提交授权确认后认证服务器通过客户端注册的回调地址直接就给客户端返回令牌access_token了。 4.2 适用场景 这种方式把令牌直接传给前端是很不安全的。因此只能用于一些安全要求不高的场景并且令牌的有效期必须非常短通常就是会话期间session有效浏览器关掉令牌就失效了。 4.3 时序图 1客户端首先在认证服务器注册好客户端信息。 2认证服务器存储维护客户端信息。 3用户在客户端上发起登录。 4向认证服务器发起认证授权请求例如http://localhost:9000/auth/oauth/authorize?client_idxxxresponse_typetokenscopemessage.readredirect_urihttp://www.baidu.com注意此时参数不需要 client_secret。 5认证服务器带上客户端参数将操作引导至用户授权确认页面用户在该页面进行授权确认操作。 6用户在授权页面选择授权范围点击确认提交则带上客户端参数和用户授权范围向认证服务器获取令牌access_token。注意此处操作已经脱离了客户端。 7认证服务器校验代理页面提交的参数信息校验通过则将令牌access_token拼接到客户端注册的回调地址返回给客户端校验失败则返回异常信息。 8客户端成功获取到令牌access_token后就可以带着令牌去访问资源服务器了。 5. token刷新模式 5.1 介绍 OAuth 2.0 允许用户自动更新令牌。token刷新模式是对 access_token 过期的一种补办操作这种补办操作减少了用户重新操作登录的流程。OAuth 2.0 在给客户端颁发 access_token 的时候同时也给客户端发放了 refresh_token而 refresh_token 的有效期要远大于 access_token 的有效期。当客户端带着已过期的 access_token 去访问资源服务器中受保护的资源时将会访问失败此时就需要客户端使用 refresh_token 去获取新的 access_token。客户端端获取到新的 access_token 后就可以带上他去访问资源服务器中受保护的资源了。 5.2 适用场景 需要延长token使用时间token过期无感刷新等等 5.3 时序图 1客户端向认证服务器请求认证授权。 2认证服务器存返回 access_token、refresh_token、授权范围、过期时间。 3access_token 过期后客户端仍旧带着过期的 access_token 去请求资源服务器中受保护的资源。 4资源服务器提示客户端这是非法的 access_token。 5客户端使用 refresh_token 向认证服务器获取新的 access_token。 6认证服务器校验 refresh_token 的有效性校验通过则给客户端颁发新的 access_token校验失败则返回异常信息。 7客户端成功获取到新的 access_token 后就可以带着新的 access_token 去访问资源服务器了。 六.关键配置说明 1.认证服务器配置类 以下是认证服务器配置类里面配置的相关说明继承并且实现AuthorizationServerConfigurerAdapter认证服务配置适配器类里面有3个关键的configure方法待我们去重写。 Configuration EnableAuthorizationServer EnableConfigurationProperties(value JwtCAProperties.class) public class TulingAuthServerConfig extends AuthorizationServerConfigurerAdapter {Autowiredprivate AuthenticationManager authenticationManager;Autowiredprivate DataSource dataSource;Autowiredprivate TulingUserDetailService tulingUserDetailService;Autowiredprivate JwtCAProperties jwtCAProperties;/*** 方法实现说明:我们颁发的token通过jwt存储*/Beanpublic TokenStore tokenStore(){return new JwtTokenStore(jwtAccessTokenConverter());}Beanpublic JwtAccessTokenConverter jwtAccessTokenConverter() {JwtAccessTokenConverter converter new JwtAccessTokenConverter();// 配置jwt的签名// converter.setSigningKey(123123);//配置jwt的密钥, 使用RSA非对称加密converter.setKeyPair(keyPair());return converter;}Beanpublic KeyPair keyPair() {KeyStoreKeyFactory keyStoreKeyFactory new KeyStoreKeyFactory(new ClassPathResource(jwtCAProperties.getKeyPairName()), jwtCAProperties.getKeyPairSecret().toCharArray());return keyStoreKeyFactory.getKeyPair(jwtCAProperties.getKeyPairAlias(), jwtCAProperties.getKeyPairStoreSecret().toCharArray());}Beanpublic TulingTokenEnhancer tulingTokenEnhancer() {return new TulingTokenEnhancer();}/*** 方法实现说明:* 客户端具体信息服务配置: 就是配置这些客户端信息存到哪内存里面还是数据库oauth_client_details表里面,认证服务器才能找到这些客户端并且颁发token* 这里是基于jdbc注入JdbcClientDetailsService也就是我们的客户端信息需要存入oauth_client_details表里面才能验证通过。*/Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {clients.withClientDetails(clientDetails());/***基于内存方式存储客户端信息clients.inMemory()//配置client_id.withClient(client)//配置client-secret.secret(passwordEncoder.encode(123123))//配置访问token的有效期.accessTokenValiditySeconds(3600)//配置刷新token的有效期.refreshTokenValiditySeconds(864000)//配置redirect_uri用于授权成功后跳转.redirectUris(http://www.baidu.com)//配置申请的权限范围.scopes(all)// 配置grant_type表示授权类型authorization_code: 授权码模式, implicit: 简化模式 ,// password 密码模式, client_credentials: 客户端模式, refresh_token: 更新令牌.authorizedGrantTypes(authorization_code,implicit,password,client_credentials,refresh_token);*/}/*** 方法实现说明:用于查找我们第三方客户端信息是否在数据库表oauth_client_details里面,* 只有配置在了表中的client_id和secrete才能获取token、token_key等等*/Beanpublic ClientDetailsService clientDetails() {return new JdbcClientDetailsService(dataSource);}/*** 方法实现说明:授权服务器端点的配置:* token怎么存储OAuth2帮我们实现了 内存存储、jdbc、jwt、jwk、redis 存储。我们需要指定使用* token需要带什么信息(增强)、* 配置自己的UserDetailsService实现spring-security的UserDetailsService 用于进行用户信息检查* 密码模式下需要传入认证管理器注入认证管理器使用spring-security里面WebSecurityConfigurerAdapter里的authenticationManagerBean()构造的AuthenticationManagerDelegator认证管理器即可*/Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {TokenEnhancerChain tokenEnhancerChain new TokenEnhancerChain();tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tulingTokenEnhancer(),jwtAccessTokenConverter()));endpoints.// token存储策略使用jwt存储tokenStore(tokenStore())//授权服务器颁发的tokentoken增强设置载荷配置jwt的密钥.tokenEnhancer(tokenEnhancerChain)//用户来获取token的时候需要 进行用户信息检查.userDetailsService(tulingUserDetailService)// 使用密码模式需要传入认证管理器,如果只需授权码模式认证则不需要注入认证管理器因为授权码模式用不到用户名密码密码模式会用到.authenticationManager(authenticationManager)// 刷新token是否可重复使用.reuseRefreshTokens(true)// 允许获取token的终端支持post和get请求默认是post的。.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST);}/*** 方法实现说明:授权服务器安全配置*/Overridepublic void configure(AuthorizationServerSecurityConfigurer security) throws Exception {//允许表单认证security.allowFormAuthenticationForClients();} }2.资源服务器配置类 Configuration EnableResourceServer public class ResourceServiceConfig extends ResourceServerConfigurerAdapter {Overridepublic void configure(HttpSecurity http) throws Exception {// 所有 /user的请求都需要oauth的认证http.authorizeRequests().anyRequest().authenticated().and().requestMatchers().antMatchers(/user/**);} }七.简单测试 随便定义两个请求 /user下的请求是需要oauth2认证的/order/id则不需要oauth2认证 RestController RequestMapping(/order) public class OrderController {GetMapping(value /{id})public String getOrder(PathVariable String id) {return order id : id;} }RestController RequestMapping(/user) public class UserController {RequestMapping(/getCurrentUser)public Object getCurrentUser(Authentication authentication) {return authentication.getPrincipal();} }直接访问资源服务器管控的资源 失败提示unauthorized未认证 通过密码模式获取token 正常生成的token大概就是这样的格式啦当然我们也可以配置token存储策略用jwt存储生成jwt类型的token。 { “access_token”: “7ca4ed69-cb0e-4a34-8031-3aa1d10a2994”, “token_type”: “bearer”, “refresh_token”:“c1156ef4-12c4-43ea-a9ac-6dc5d83284e4”, “expires_in”: 3253, “scope”:“all” } 通过access_token访问资源服务器管控的资源成功返回认证信息 直接访问非资源服务器的资源(不需要经过oauth2认证)成功 八.小结 好啦关于OAuth2.0协议介绍相信小伙伴们有了简单了解了。大家之前如果对接过微信开放平台或者对接过其他的一些服务应该多少见识过client_id,client_secretgrant_type等等名词这些就是咱OAuth2.0设计里面的相关授权模式了OAuth2.0协议应用真的太广泛了还是得需要了解下的。万一咱们所做系统之后需要与很多客户端打交道然后要做认证授权如果了解OAuth2.0设计思路对我们自己实现也是有很大帮助的。
http://www.zqtcl.cn/news/659290/

相关文章:

  • 安徽建海建设工程有限公司网站活动推广宣传方案
  • 镇江市建设审图网站关键词优化过程
  • 广州个人网站备案要多久手机软件界面设计
  • 网站建设成都公司哪家好wordpress悬浮代码
  • 制作网站服务公司wordpress文章添加关注公众号
  • 陶瓷企业 瓷砖地板公司网站建设视频解析wordpress
  • 城乡建设厅网站首页wordpress模板汉化教程视频
  • 网站建设怎么设置渐变色手机网站开发服务商
  • 网站备案用座机租用南宁网站建设优化排名
  • 网页制作与网站建设实战大全读后感霞浦建站公司
  • 网站运营与网络推广方案搜索引擎关键字排名优化
  • 前端角度实现网站首页加载慢优化王业美三个字组成的子
  • 阜阳网站是用idea做html网站
  • 商业网站可以选择.org域名吗seo是东莞企业网站排seo
  • 做百度手机网站关键词排名哪个通讯公司的网络好
  • 网站后期维修问题qq网站建设
  • 做网站不会框架网站开发逻辑图
  • 东莞网站制作个性化宜都网站建设
  • 空壳网站查询网络服务提供者不履行法律、行政法规
  • 付费阅读网站代码做网站需要什么软件
  • 泗阳网站设计外贸网站特点
  • 国外logo设计网站推荐网页浏览器证书失效怎么修复
  • asp.net建立手机网站校园网站设计代码
  • 网站图标怎么下载肇庆新农村建设内容在哪个网站
  • 上海建站哪家好临沂建设工程质量 监督网站
  • 中国建设银行网站地图上海最新新闻热点事件
  • wordpress4.95淘宝优化标题都是用什么软件
  • 大网站用wordpress吗网站广告费怎么做分录
  • 江西建设安全网站会展平面设计主要做什么
  • 阿里巴巴免费做网站吗企业商务网站建设策划书