安全框架--OAuth2

上一篇 <<<安全框架--JWT
下一篇 >>>安全架构整体设计方案


OAuth2.0: 不是一们技术,而是一种协议,开放授权协议。

应用场景

第三方联合登陆 微信、QQ、支付宝、钉钉、码云、github底层都是会遵循oauth2.0协议。

OAuth2认证和授权的过程

1)、用户访问第三方网站网站,想对用户存放在服务商的某些资源进行操作。
2)、第三方网站向服务商请求一个临时令牌。
3)、服务商验证第三方网站的身份后,授予一个临时令牌。
4)、第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。
5)、用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。
6)、授权成功后,服务商将用户导向第三方网站的返回地址。
7)、第三方网站根据临时令牌从服务商那里获取访问令牌。
8)、服务商根据令牌和用户的授权情况授予第三方网站访问令牌。
9)、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。

OAuth认证和授权的原理

  • a.根据appid和appkey 获取授权码
  • b.根据授权码获取accesstoken和refreshToken
  • c.根据accessToken获取openid
  • d.根据openid获取用户信息
  • e.使用refreshToken定时刷新accessToken

Oauth2角色划分

  • a、Resource Server:被授权访问的资源
  • b、Authotization Server:OAUTH2认证授权中心
  • c、Resource Owner: 用户
  • d、Client:使用API的客户端(如Android 、IOS、web app)

Oauth2四种授权方式

1)、授权码模式(authorization code)用在客户端与服务端应用之间授权
2)、简化模式(implicit)用在移动app或者web app(这些app是在用户的设备上的,如在手机上调起微信来进行认证授权)
3)、密码模式(resource owner password credentials)应用直接都是受信任的(都是由一家公司开发的)
4)、客户端模式(client credentials)用在应用API访问

Oauth2令牌存放方式

  • 1)、db
  • 2)、memory

代码演示

在Spring Cloud需要使用oauth2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认证和授权,从而获得access_token,而这个token是受其他微服务信任的
Spring Cloud oauth2 需要依赖Spring security
认证中心

a、获得授权码

请求:http://localhost:8080/oauth/authorize?client_id=jarye_appid&response_type=code
返回:http://www.jarye.cn/callback?code=w111vA
授权操作

b、根据授权码获取令牌


获得令牌信息

c、令牌的有效性验证


令牌有效性验证

资源中心

a、直接请求报错


直接请求报错

b、加上令牌信息访问正常


加上令牌访问正常

核心代码

认证中心配置

/*
当前项目为认证授权中心
 */
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
    //允许表单提交 检查accessToken是否有效期的情况下
    security.allowFormAuthenticationForClients()
            .checkTokenAccess("permitAll()");
}

/**
 * 分配我们的appid和appkey clentid clientkey
 *
 * @param clients
 * @throws Exception
 */
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    // 读数据库
    clients.inMemory()
            // appid
            .withClient("jarye_appid")
            .secret(passwordEncoder.encode("jarye_pwd"))
            // 授权码
            .authorizedGrantTypes("authorization_code")
            // 作用域 表示所有的接口都可以访问 分配我们的appid 调用接口的权限
            .scopes("all")
            // 资源ID
            .resourceIds("jarye_resource")
            // 用户选择授权之后,跳转到该地址传递code授权码
            .redirectUris("http://www.jarye.cn/callback");
}

资源中心

/**
* 功能描述:远程令牌校验的服务
*/
@Primary
@Bean
public RemoteTokenServices remoteTokenServices() {
    final RemoteTokenServices tokenServices = new RemoteTokenServices();
    //设置授权服务器check_token端点完整地址
    tokenServices.setCheckTokenEndpointUrl("http://localhost:8080/oauth/check_token");
    //设置客户端id与secret,注意:client_secret值不能使用passwordEncoder加密!
    tokenServices.setClientId(appId);
    tokenServices.setClientSecret(appSecret);
    return tokenServices;
}

/**
* 功能描述:配置授权信息
*/
@Override
public void configure(HttpSecurity http) throws Exception {
    //设置创建session策略
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
    //@formatter:off
    //所有请求必须授权
    http.authorizeRequests()
            .anyRequest().authenticated();
    //@formatter:on
}

/**
* 功能描述:配置资源信息
*/
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
    resources.resourceId("jarye_resource").stateless(true);
}

相关文章链接:
<<<Web常用攻击手段-XSS攻击
<<<Web常用攻击手段-SQL注入
<<<Web常用攻击手段-Http请求防盗链
<<<Web常用攻击手段-CSRF攻击
<<<Web常用攻击手段-上传文件漏洞
<<<Web常用攻击手段-忘记密码
<<<Web常用攻击手段-其他漏洞
<<<安全技术--数据加密/认证技术
<<<安全技术--Https相关知识
<<<安全技术--接口幂等性设计
<<<安全框架--SpringSecurity
<<<安全框架--JWT
<<<安全架构整体设计方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容