热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

cas单点登录CasServer开启Oauth2.0协议(二十)

学习Cas这么久了,一直在按照CAS自身的协议接入,Cas的强大在于有官方的插件,可以支持其他的协议,当然了,现在流行的Oauth2.0协

学习Cas这么久了,一直在按照CAS自身的协议接入,Cas的强大在于有官方的插件,可以支持其他的协议,当然了,现在流行的Oauth2.0协议肯定是支持了,下面开始集成Oauth。

参考博客

https://apereo.github.io/cas/5.3.x/installation/OAuth-OpenId-Authentication.html
https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#oauth2

集成过程

1.pom添加依赖

org.apereo.cascas-server-support-oauth-webflow${cas.version}

2.application.properties添加以下属性 

cas.authn.oauth.refreshToken.timeToKillInSeconds=2592000
cas.authn.oauth.code.timeToKillInSeconds=30
cas.authn.oauth.code.numberOfUses=1
cas.authn.oauth.accessToken.releaseProtocolAttributes=true
cas.authn.oauth.accessToken.timeToKillInSeconds=7200
cas.authn.oauth.accessToken.maxTimeToLiveInSeconds=28800
cas.authn.oauth.grants.resourceOwner.requireServiceHeader=true
cas.authn.oauth.userProfileViewType=NESTED

3.增加接入servcie的注册文件:OAUTH-1002. json,内容如下: 

{"@class" : "org.apereo.cas.support.oauth.services.OAuthRegisteredService","clientId": "20180901","clientSecret": "123456","serviceId" : "^(https|http|imaps)://.*","name" : "OAuthService","id" : 1002
}

端点介绍

启用OAuth支持后,将提供以下端点:

端点描述方法类型
/oauth2.0/authorize获取authCode或者tokenGET
/oauth2.0/accessToken,/oauth2.0/token获取accessTokenPOST
/oauth2.0/profile通过access_token参数获取用户信息GET

/oauth2.0/authorize方法介绍

端点请求参数响应内容
/oauth2.0/authorizeresponse_type=code&client_id=ID&redirect_uri=CALLBACK会重定向到redirect_uri这个地址并携带authCode参数
/oauth2.0/authorizeresponse_type=token&client_id=ID&redirect_uri=CALLBACK会重定向到redirect_uri这个地址并携带token参数

response_type参数有两种:一种是code,另一种是token
code模式:response_type=code也就是授权码模式。返回authCode。
token模式:另一种是 是获取token,该token类似于accessToken,可以根据这个token获取用户信息。H5页面或者app等应用可以使用token模式。

/oauth2.0/accessToken方法介绍

端点请求参数响应内容
/oauth2.0/accessTokengrant_type=authorization_code&client_id=ID&client_secret=SECRET
&code=CODE&redirect_uri=CALLBACK
传统模式根据authCode获取accesstoken
/oauth2.0/accessTokengrant_type=password&client_id=ID&client_secret=SECRET
&username=USERNAME&password=PASSWORD
返回accessToken
/oauth2.0/accessTokengrant_type=client_credentials&client_id=client&client_secret=secret返回accessToken
/oauth2.0/accessTokengrant_type=refresh_token&client_id=ID&client_secret=SECRET
&refresh_token=REFRESH_TOKEN
刷新之后返回新的accessToken

grant_type参数有以下几种类型:
authorization_code:
grant_type=authorization_code使用最多的一种,根据code 获取accessToken。常用于第三方登录,用户输入账号密码,同意并授权,第三方不知道用户的账号和密码,获取code之后,再根据code获取accessToken,使用accessToken获取用户同意获取的信息。
password:
grant_type=password 允许Oauth客户端直接发送用户的账号和密码到Oauth服务端,常用于web服务,和受信任的客户端(一般是内部服务)。
client_credentials:
grant_type=client_credentials采用Client Credentials方式,即应用公钥、密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open API,并且需要开发者提前向开放平台申请,成功对接后方能使用。认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的 API。比如获取App首页最新闻列表,由于这个数据与用户无关,所以不涉及用户登录与授权,但又不想任何人都可以调用这个WebAPI,这样场景就适用。
refresh_token:
grant_type=refresh_token 上一次的令牌过期时,根据上一次请求返回的refresh_token来刷新accessToken.
该怎么选择类型呢?参考文档https://alexbilbie.com/guide-to-oauth-2-grants/

测试

1.首先Oauth客户端使用Get请求访问以下地址,获取AuthCode
https://server.cas.com:8443/cas/oauth2.0/authorize?response_type=code&client_id=20180901&redirect_uri=http://www.baidu.com
参数说明:
response_type=code,授权码模式
client_id=20180901,这个参数的值是servcie注册的定义的,每个接入系统都分配一个值。
redirect_uri=http://www.baidu.com:这个是认证通过后跳转的地址。认证成功之后会跳转到百度,并且连接后面会带着code参数。
这里写图片描述
2.根据authCode获取accessToken
https://server.cas.com:8443/cas/oauth2.0/accessToken?grant_type=authorization_code&client_id=20180901&client_secret=123456&code=OC-4-RKvMl2XJCtZ0xAYBiOOiSvwIukZyHmlR&redirect_uri=http://www.baidu.com
这里写图片描述
3.根据accessToken获取用户信息
https://server.cas.com:8443/cas/oauth2.0/profile?access_token=AT-1-GCE68lY8e2bDjyPAlcXu4FKggRa-3RrX
默认只返回了用户名,想要更多返回参数,参考上篇博客。
这里写图片描述

上面只是进行code授权码的演示,其他模式请自行测试,测试中出现了不少问题,如下:

1.访问服务的时候,自动跳转到https://cas.example.org:8443服务器
这里写图片描述
解决方案:在application.properties中添加如下配置:

#需要配置 server name的信息,不然就会跑到 https://cas.example.org:8443
cas.server.name=https://server.cas.com:${server.port}/cas
cas.server.prefix=${cas.server.name}

2.出现如下异常的原因有很多,比如client_id不存在,或者 authCode已失效,都会报这个异常
这里写图片描述
cas使用oauth依赖的包很多,而且想要改成分布式的使用redis来存储code 和accessToken 改起来很麻烦,报错什么的都很烂,最后选择自己写了一个Oauth授权,返回码什么都很清晰,可以跟现在的cas集成,就像之前配置验证码似的写一个Controller对外提供服务,这里就不详细介绍了,具体参考前面的博客,可以自己写Oauth。

 

 


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
liyanyl_499
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有