mirror of
https://gitee.com/dromara/MaxKey.git
synced 2025-12-06 17:08:29 +08:00
add ospp docs
This commit is contained in:
parent
1f8520c650
commit
3766cc04ce
41
summer-ospp/2025/doc_ossp/maxkey-docs/maxkey-docs/README.md
Normal file
41
summer-ospp/2025/doc_ossp/maxkey-docs/maxkey-docs/README.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# Website
|
||||||
|
|
||||||
|
This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn
|
||||||
|
```
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn start
|
||||||
|
```
|
||||||
|
|
||||||
|
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
```
|
||||||
|
$ yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
||||||
|
|
||||||
|
### Deployment
|
||||||
|
|
||||||
|
Using SSH:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ USE_SSH=true yarn deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
Not using SSH:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ GIT_USER=<Your GitHub username> yarn deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
|
||||||
@ -0,0 +1,164 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
title: 概述
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## MaxKey概述
|
||||||
|
<b>MaxKey</b>单点登录认证系统,谐音为马克思的钥匙寓意是最大钥匙,是<b>业界领先的IAM身份管理和认证产品</b>;支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议;提供<i>安全、标准和开放</i>的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、资源管理和权限管理等。
|
||||||
|
|
||||||
|
|
||||||
|
官方QQ:**1054466084**
|
||||||
|
|
||||||
|
|
||||||
|
邮箱EMAIL: <b>support@maxsso.net</b>
|
||||||
|
|
||||||
|
|
||||||
|
代码托管 <a href="https://github.com/dromara/MaxKey" target="_blank"><b>GitHub</b></a> | <a href="https://gitee.com/dromara/MaxKey" target="_blank"><b>码云(Gitee)</b></a>
|
||||||
|
|
||||||
|
### 什么是单点登录
|
||||||
|
|
||||||
|
>**单点登录(Single Sign On)**简称为**SSO**
|
||||||
|
>
|
||||||
|
>用户只需要登录认证中心一次就可以访问所有相互信任的应用系统,无需再次登录,主要功能:
|
||||||
|
>
|
||||||
|
>1.所有应用系统共享一个身份认证系统
|
||||||
|
>
|
||||||
|
>2.所有应用系统能够识别和提取ticket信息
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 标准协议
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tbody>
|
||||||
|
<tr class="a">
|
||||||
|
<th>序号</th>
|
||||||
|
<th>协议</th>
|
||||||
|
<th>支持</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr class="b">
|
||||||
|
<td>1 </td>
|
||||||
|
<td>OAuth 2.x/OpenID Connect</td>
|
||||||
|
<td> 高 </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="a">
|
||||||
|
<td>2 </td>
|
||||||
|
<td>SAML 2.0 </td>
|
||||||
|
<td>高 </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>3 </td>
|
||||||
|
<td>JWT</td>
|
||||||
|
<td> 高 </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="a">
|
||||||
|
<td>4 </td>
|
||||||
|
<td>CAS</td>
|
||||||
|
<td>高 </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>5 </td>
|
||||||
|
<td>FormBased</td>
|
||||||
|
<td> 中 </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="a">
|
||||||
|
<td>6 </td>
|
||||||
|
<td>TokenBased(Post/Cookie)</td>
|
||||||
|
<td> 中</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>7 </td>
|
||||||
|
<td>ExtendApi</td>
|
||||||
|
<td> 低 </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="a">
|
||||||
|
<td>8 </td>
|
||||||
|
<td>EXT</td>
|
||||||
|
<td> 低</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 登录支持
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tbody>
|
||||||
|
<tr class="a">
|
||||||
|
<th>序号</th>
|
||||||
|
<th>登录方式</th>
|
||||||
|
<th>类型</th>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>1 </td>
|
||||||
|
<td>图片验证码</td>
|
||||||
|
<td>字母/数字/算术</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="a">
|
||||||
|
<td>2 </td>
|
||||||
|
<td>双因素认证 </td>
|
||||||
|
<td>短信或者邮件动态验证码</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>3 </td>
|
||||||
|
<td>短信认证</td>
|
||||||
|
<td>腾讯云短信/阿里云短信/网易云信 </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="a">
|
||||||
|
<td>4 </td>
|
||||||
|
<td>TOTP或者HOTP动态口令</td>
|
||||||
|
<td>Google/Microsoft Authenticator/FreeOTP/支持TOTP或者HOTP</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>5 </td>
|
||||||
|
<td>Windows域认证</td>
|
||||||
|
<td>Kerberos/SPNEGO/AD域</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>6 </td>
|
||||||
|
<td>LDAP认证</td>
|
||||||
|
<td>OpenLDAP/ActiveDirectory/标准LDAP服务器</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="a">
|
||||||
|
<td>7 </td>
|
||||||
|
<td>社交账号</td>
|
||||||
|
<td>微信/QQ/微博/钉钉/Google/Facebook/其他</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="b">
|
||||||
|
<td>8 </td>
|
||||||
|
<td>扫码登录</td>
|
||||||
|
<td>企业微信/钉钉/飞书扫码登录</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 产品优势
|
||||||
|
|
||||||
|
1. 提供标准的认证接口以便于其他应用集成SSO,安全的移动接入,安全的API、第三方认证和互联网认证的整合。
|
||||||
|
|
||||||
|
2. 提供用户生命周期管理,支持SCIM 2协议;开箱即用的连接器(Connector)实现身份供给同步。
|
||||||
|
|
||||||
|
3. 简化微软Active Directory域控、标准LDAP服务器机构和账号管理,密码自助服务重置密码。
|
||||||
|
|
||||||
|
4. 认证多租户功能,支持集团下多企业独立管理或企业下不同部门数据隔离的,降低运维成本。
|
||||||
|
|
||||||
|
5. 认证中心具有平台无关性、环境多样性,支持Web、手机、移动设备等, 如Apple iOS,Andriod等,将认证能力从B/S到移动应用全面覆盖。
|
||||||
|
|
||||||
|
6. 基于Java EE平台,微服务架构,采用Spring、MySQL、Tomcat、Redis、MQ等开源技术,扩展性强。
|
||||||
|
|
||||||
|
7. 开源、安全、自主可控,许可证 Apache 2.0 License & <a href="https://maxkey.top/zh/about/licenses.html" target="_blank">MaxKey版权声明</a>。
|
||||||
|
|
||||||
|
|
||||||
|
## 项目版本路线图
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 最有价值开源项目
|
||||||
|
Gitee-最有价值开源项目
|
||||||
|
|
||||||
|

|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
---
|
||||||
|
title: 新闻动态
|
||||||
|
---
|
||||||
|
# 新闻动态
|
||||||
|
|
||||||
|
关于Authing.cn在百度搜索关键字“MaxKey单点登录认证系统”侵权的进展通告-[2022/07/16] <a href="/about/news/licenses_zqjy_2207" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统前后端分离 v3.5.1GA 发布[2022/06/01] <a href="https://www.oschina.net/news/199127/maxkey-3-5-ga-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统前后端分离 v3.5.0GA 发布[2022/05/11] <a href="https://www.oschina.net/news/195215/maxkey-3-5-0-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统 v3.5.0 RC 发布[2022/05/01] <a href="https://www.oschina.net/news/193842/maxkey-3-5-0-rc-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统 v3.3.0 GA 发布[2022/03/03] <a href="https://www.oschina.net/news/184825" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统 v3.2.0 GA 发布[2022/02/17] <a href="https://www.oschina.net/news/182808/maxkey-3-3-2-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
关于Authing.cn在百度搜索关键字“MaxKey单点登录认证系统”侵权的通告-[2021/12/15] <a href="/about/news/licenses_zqjy" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统 v3.1.0 GA 发布[2021/11/03] <a href="https://www.oschina.net/news/167060/maxkey-3-1-0-ga-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统微服务架构 v3.0.0GA 发布[2021/09/29] <a href="https://www.oschina.net/news/162238/maxkey-3-0-0-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统 v2.9.0 GA 发布[2021/08/24] <a href="https://www.oschina.net/news/157023/maxkey-2-9-0-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统 v 2.8.1GA 发布 [2021/06/25] <a href="https://www.oschina.net/news/147646/maxkey-2-8-1-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey 单点登录认证系统 v2.7.0GA 发布 [2021/04/15] <a href="https://www.oschina.net/news/137556/maxkey-2-7-0-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
Dromara 开源社区再次新增两个 GVP 项目 [2021/03/16] <a href="https://www.oschina.net/news/133311/dromara-news" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统 v 2.6.0GA 发布 [2021/03/05] <a href="https://www.oschina.net/news/131947/maxkey-2-6-0-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统 v2.5.0GA 发布 [2021/02/06] <a href="https://www.oschina.net/search?scope=news&q=maxkey&days=0&onlytitle=0&sort_by_time=1" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统 v2.4.0GA 发布 [2021/01/01] <a href="https://www.oschina.net/search?scope=news&q=maxkey&days=0&onlytitle=0&sort_by_time=1" target="_blank">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v2.3.0GA 发布 [2020/11/11] <a href="https://www.oschina.net/news/120328/maxkey-2-3-0-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v2.2.0GA 发布 [2020/09/24] <a href="https://my.oschina.net/u/4420055/blog/4641359" target="_blank">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v2.2.0RC 发布 [2020/09/04] <a href="https://www.oschina.net/news/118371/maxkey-2-2-0-rc-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
六个高Star开源项目,让你更懂OAuth和单点登录 [2020/08/17] <a href="https://www.bilibili.com/read/cv7206185/" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey官方网站全新改版 [2020/08/06] <a href="https://www.maxkey.top" target="_blank">MaxKey.top</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v2.1.0GA 发布 [2020/08/01] <a href="https://www.oschina.net/news/117724/maxkey-2-1-0-ga-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v2.0.0GA 发布 [2020/07/13] <a href="https://www.oschina.net/news/117142/maxkey-2-0-0-ga-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v2.0.0RC1 发布 [2020/06/01] <a href="https://www.oschina.net/news/116082/maxkey-2-0-0-rc1-released" target="_blank">查看</a>
|
||||||
|
|
||||||
|
开源sso单点登陆系统推荐,MaxKey社区努力进步中 [2020/05/20]<a href="https://blog.csdn.net/netsec_steven/article/details/106230338">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v1.4.0GA 发布 [2020/05/01] <a href="https://www.oschina.net/news/115416/maxkey-1-4-0-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
还得看 Java!Gitee 4月最火 Java 项目大盘点 [2020/04/07]<a href="https://www.bilibili.com/read/cv6029156" target="_blank">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v1.3.0GA 发布 [2020/04/04] <a href="https://www.oschina.net/news/114633/maxkey-1-3-0-ga" target="_blank">查看</a>
|
||||||
|
|
||||||
|
单点登录认证系统 MaxKey v1.2.0GA 发布 [2020/02/18] <a href="https://my.oschina.net/u/4420055/blog/3167682" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统 oschina收录时间 [2019-12-09]<a href="https://www.oschina.net/p/maxkey" target="_blank">查看</a>
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统开源重构 [2019-02-07]
|
||||||
@ -0,0 +1,243 @@
|
|||||||
|
---
|
||||||
|
title: 项目团队
|
||||||
|
className: ./css/custom.css
|
||||||
|
---
|
||||||
|
## 项目团队
|
||||||
|
|
||||||
|
一个成功的项目需要许多人扮演许多角色。有些成员编写代码或文档,而另一些成员作为测试人员有价值,可以提交补丁和建议。
|
||||||
|
|
||||||
|
项目团队由成员和贡献者组成。成员可以直接访问项目的源代码并积极发展代码库。贡献者通过向成员提交补丁和建议来改善项目。该项目的贡献者数量是无限的。今天就参与。非常感谢该项目的所有贡献。
|
||||||
|
|
||||||
|
## 团队成员
|
||||||
|
|
||||||
|
以下是具有提交特权的开发者列表,这些开发者以一种或另一种方式直接对项目做出了贡献。
|
||||||
|
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<th>名称</th><th >头像(CodeID)</th><th>组织</th><th>角色</th><th>时区</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>shimingxy</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/shimingxy">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/1563377?v=4"/>
|
||||||
|
</a></td>
|
||||||
|
<td>MaxKeyTop</td>
|
||||||
|
<td>PMC Chair</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>shibanglin</td>
|
||||||
|
<td>
|
||||||
|
<a href ="#">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/71626778?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>MaxKeyTop</td>
|
||||||
|
<td>PMC Member</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>fucan1017</td>
|
||||||
|
<td>
|
||||||
|
<a href ="#">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/71626778?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>MaxKeyTop</td>
|
||||||
|
<td>PMC Member</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Coloey</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/Coloey">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/71813516?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>MaxKeyTop</td>
|
||||||
|
<td>PMC Member</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>apacheBright</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/apacheBright">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/27547000?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>MaxKeyTop</td>
|
||||||
|
<td>PMC Member</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>FranisiL</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/FranisiL">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/45416982?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>MaxKeyTop</td>
|
||||||
|
<td>PMC Member</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Garrett.Xia</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/randomNaming">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/42424717?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>MaxKeyTop</td>
|
||||||
|
<td>PMC Member</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
## 贡献者
|
||||||
|
|
||||||
|
以下其他人员通过建议,补丁或文档的方式为该项目做出了贡献。
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<th>名称</th><th >头像(CodeID)</th><th>组织</th><th>角色</th><th>时区</th><th>问题</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>stdnt-xiao</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/stdnt-xiao">
|
||||||
|
<img width="64px" src ="https://avatars.githubusercontent.com/u/20313983?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
<td>Docker和docker-compose部署的优化</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>QQ793732900(恍然如梦)</td>
|
||||||
|
<td>
|
||||||
|
<img width="64px" src="https://sqimg.qq.com/qq_product_operations/im/qqlogo/imlogo_b.png"/>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
<td>解决Maxkey在Chrome “您的连接不是私密连接” 问题</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>xiazhenyou</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/xiazhenyou">
|
||||||
|
<img width="64px" src ="https://avatars.githubusercontent.com/u/58844127?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
<td>MaxKey-SpringBoot4CAS-demo</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>要懂得舍得(pcore)</td>
|
||||||
|
<td><a href ="https://gitee.com/pcore">
|
||||||
|
<img width="64px" src="https://portrait.gitee.com/uploads/avatars/user/385/1157580_pcore_1600243694.png!avatar200"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
<td>一键登录</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>yutel</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://gitee.com/yutel">
|
||||||
|
<img width="64px" src ="https://portrait.gitee.com/uploads/avatars/user/6/18222_yutel_1578915201.png!avatar200"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
<td>退出功能优化</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>alanland</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://gitee.com/alanland">
|
||||||
|
<img width="64px" src ="https://avatars.githubusercontent.com/u/2202150?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
<td>Docker支持</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>MemoryF</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/MemoryF">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/26829986?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Asia/北京</td>
|
||||||
|
<td>前后端分离注销问题</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>caffebabee</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://gitee.com/caffebabee">
|
||||||
|
<img width="64px" src="https://portrait.gitee.com/uploads/avatars/user/1724/5174685_caffebabee_1578981752.png!avatar200"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>CN</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>tzk007</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://gitee.com/tzk007">
|
||||||
|
<img width="64px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAAAXNSR0IArs4c6QAAAdtJREFUeF7t1DFqAgEUhOG3loL3EO9kZ2fnXSytbDzL9p5EwUZISAKBNHHgsb+G/NbjG/Zz3KGq3srP5AKD0JMbfxYIzTgLDTkLLTQlAPX4jhYaEoBqXLTQkABU46KFhgSgGhctNCQA1bhooSEBqMZFCw0JQDUuWmhIAKpx0UJDAlCNixYaEoBqXLTQkABU46KFhgSgGhf9X6DP53OtVqtJH/dyudR2u63j8Thpz2/Hn75ooaHfXmgIehzHWi6XD9tms1nN5/Maho8/4dfndrvV/X5/+N3r9Vq73a5Op9PD7FSBp7860gdbr9e13+9rsVh8f+VwONRms0lPPDUnNMQvtNA/BXx1QIsQWuhIwHd0xNQPCd03jC4IHTH1Q0L3DaMLQkdM/ZDQfcPogtARUz8kdN8wuiB0xNQPCd03jC4IHTH1Q0L3DaMLQkdM/ZDQfcPogtARUz8kdN8wuiB0xNQPCd03jC4IHTH1Q0L3DaMLQkdM/ZDQfcPowp+Bjp7mhUNCQz+O0EJDAlCNixYaEoBqXLTQkABU46KFhgSgGhctNCQA1bhooSEBqMZFCw0JQDUuWmhIAKpx0UJDAlCNixYaEoBqXLTQkABU46KFhgSgGhctNCQA1bhoCPodtfwsELZbAskAAAAASUVORK5CYII="/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>CN</td>
|
||||||
|
<td>MAC 启动时获取OS信息报错修复</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>whensuc</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://gitee.com/whensuc">
|
||||||
|
<img width="64px" src="https://portrait.gitee.com/uploads/avatars/user/574/1722891_whensuc_1651024696.png!avatar200"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>CN</td>
|
||||||
|
<td>修正redis连接不释放</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>JLLeitschuh</td>
|
||||||
|
<td>
|
||||||
|
<a href ="https://github.com/JLLeitschuh">
|
||||||
|
<img width="64px" src="https://avatars.githubusercontent.com/u/1323708?v=4"/>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>contributor</td>
|
||||||
|
<td>Boston, MA</td>
|
||||||
|
<td>vuln-fix: Temporary File Information Disclosure</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## 其他贡献者
|
||||||
|
|
||||||
|
https://github.com/dromara/MaxKey/graphs/contributors
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
title: 项目许可证
|
||||||
|
---
|
||||||
|
|
||||||
|
## 概况
|
||||||
|
<p>通常,为项目列出的许可证是项目本身的许可证,而不是依赖项。</p>
|
||||||
|
|
||||||
|
## 项目许可证
|
||||||
|
<h4>Apache License, Version 2.0</h4>
|
||||||
|
|
||||||
|
<a href="http://www.apache.org/licenses/LICENSE-2.0" name="Apache_License_Version_2.0">
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
</a>
|
||||||
|
|
||||||
|
```
|
||||||
|
Copyright [2024] [MaxKey of copyright https://www.maxkey.top]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Apache-2.0中文解释
|
||||||
|
|
||||||
|
Apache License Version 2.0 鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。Apache Licence 也是对商业应用友好的许可,使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
|
||||||
|
|
||||||
|
|
||||||
|
协议中明确写出,只要遵守该许可的条款和条件的前提下,每位贡献者将被授予永久的、全球性的、非排他性的、免费的、免版税的、不可撤销的版权许可,以复制、准备衍生作品、公开展示、公开使用、再许可、分发本作品和其衍生作品(无论是以“源码”还是“目标”形式)。
|
||||||
|
|
||||||
|
|
||||||
|
也就是不仅可以用,还可以对基于 Apache License Version 2.0 的作品或衍生作品进行修改或增补,并应用到商业项目。但前提是满足以下几个条件:
|
||||||
|
|
||||||
|
1、需要给代码的用户一份 Apache Licence;
|
||||||
|
|
||||||
|
2、如果你修改了代码,需要在被修改的文件中说明;
|
||||||
|
|
||||||
|
3、在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;
|
||||||
|
|
||||||
|
4、如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
总结下来,就是需要在相关产品的 发行版本,Notice 文件、源码或文档里,添加归属声明的可读拷贝,并给接收者提供开源项目中提供的 Apache License Version 2.0 许可证的拷贝,在分发的衍生作品的源代码中,<b>必须保留本作品源码中的所有版权、专利、商标和归属声明</b>。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
公司在使用 Apache License Version 2.0 授权的开源软件,<b>进行分发的过程中,不应隐瞒或故意忽略提及对此软件的使用</b>。
|
||||||
|
|
||||||
|
## 版权声明
|
||||||
|
必须保留本作品及源码中的所有版权、专利、商标和归属声明,请遵守开源许可证,合规使用开源产品,避免法律纠纷。
|
||||||
|
|
||||||
|
## 第三方依赖声明
|
||||||
|
|
||||||
|
参见<a href="/about/dependency">项目依赖</a>
|
||||||
|
|
||||||
|
|
||||||
|
## 违反开源协议新闻
|
||||||
|
|
||||||
|
<a href="/about/news/licenses_zqjy_2207" target="_blank">关于Authing.cn在百度搜索关键字“MaxKey单点登录认证系统”侵权的进展通告-2022年07月16日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://www.oschina.net/news/201007" target="_blank">开源项目维权成功案例: spug 开源运维平台成功维权-2022年06月28日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://blog.csdn.net/csdnopensource/article/details/125447214" target="_blank">删库跑路、“投毒”、改协议,开源有哪几大红线千万不能踩?-2022年06月24日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://blog.csdn.net/csdnnews/article/details/124837759" target="_blank">GPL 法律之战:它是自由软件许可证,更具合同效力-2022年05月18日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://www.oschina.net/news/180750/volcengine-apache-skywalking" target="_blank">违规再分发 SkyWalking,火山引擎回应并道歉-2022年01月29日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="/about/news/licenses_zqjy" target="_blank">关于Authing.cn在百度搜索关键字“MaxKey单点登录认证系统”侵权的通告-2021年12月15日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://www.oschina.net/news/159435" target="_blank">首例!违反 GPL 协议致侵权,被判赔偿 50 万元-2021年09月09日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://www.oschina.net/news/159429" target="_blank">Apache Doris 声明 | 你们想知道的一切,都在这里了-2021年09月09日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://www.oschina.net/news/135377/spug-announce" target="_blank">致老男孩教育的维权声明 - Spug 运维-2021年03月31日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://segmentfault.com/a/1190000022973105" target="_blank">博云违反 Apache 2.0 开源协议被要求整改,开源协议到底应该如何遵守?-2020年06月19日</a>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<a href="https://www.oschina.net/news/100440/what-is-a-repo-license" target="_blank">开源作者痛斥京东重量级项目抄袭-2018年09月30日</a>
|
||||||
@ -0,0 +1,664 @@
|
|||||||
|
---
|
||||||
|
title: 企业版
|
||||||
|
---
|
||||||
|
|
||||||
|
<h2>企业版和社区版对比</h2>
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<th>模块<br/>Category</th><th>功能<br/>Features</th><th>社区版<br/>Community</th><th>企业版<br/>Enterprise</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>OpenID Connect 1.0</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>OAuth v2.0/2.1</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>SAML V2.0</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>CAS 1.0/2.0/3.0</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>JWT</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>TOKEN令牌支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>密码代填(FORMBASED)支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>API扩展支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>扩展定制支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-图片验证码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-短信验证码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-TOTP动态令牌</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-邮件验证码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-社交账号登陆</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-企业微信、钉钉、飞书扫码登陆</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-双因素认证</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-Active Directory用户登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-OpenLDAP用户登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-Windows域认证</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>HMAC_SHA256信任登录</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>IP地址转换行政区域,Ip2region & GeoLite2离线地址库</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>登录注销</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 应用访问权限控制</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>密码修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>密码过期修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>首次登陆密码修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>找回密码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>安全配置</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户信息修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>社交账号绑定</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>主题切换</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>时间令牌</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 应用账号管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 多种设备支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 系统登录日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 应用访问日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>Redis集群支持</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>身份管理-机构管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>身份管理-用户管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>身份管理-组管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>身份管理-组成员管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>身份管理-岗位管理</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>账号管理</td>
|
||||||
|
<td>简单映射</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>应用管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>访问控制-会话管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>访问控制-组访问控制(RBAC)管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>访问控制-用户访问控制(ACL)管理</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>权限管理-资源管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>权限管理-权限管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>权限管理-角色管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>权限管理-细粒度权限</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>OpenAPI-资源管理</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>OpenAPI-权限管理</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>分级授权-组织授权</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>分级授权-应用授权</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>分级授权-角色授权</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-同步器管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-登录策略</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-密码策略</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-弱密码策略</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>管理端单点登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-账号策略</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-适配器管理</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>REST接口机构和用户同步</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>SCIM2接口机构和用户同步</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>MQ(RocketMQ/KAFKA)同步支持</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >生命周期管理</td><td colspan="4">同步器把存在上游系统的机构和账号同步到MaxKey</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>Active Directory同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>标准LDAP同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>企业微信同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>钉钉同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>飞书同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>北森HR同步器</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >生命周期管理</td><td colspan="4">连接器把MaxKey的机构和账号同步到下游系统</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>Active Directory连接器</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>标准LDAP连接器</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>企业微信连接器</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>钉钉连接器</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>飞书连接器</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>华为WeLink连接器</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>仪表盘报表</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>系统管理日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>系统登录日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>应用登录日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>同步器日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>连接器日志</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>Maven版本</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>JAVA SDK<br/>.NET SDK</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>支持多平台<br/>Windows<br/>LINUX<br/>UNIX</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>支持主流浏览器:<br/>Google Chrome <br/>Mozilla Firefox <br/> Internet Explorer 10 <br/>Microsoft Edge <br/>等</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>支持PC、平板PAD、手机Moblie</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>开发集成指南</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>产品文档及安装配置(集群)</td>
|
||||||
|
<td><div class="icon">社区</div></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>版本升级及BUG修复</td>
|
||||||
|
<td>社区</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>官方QQ(1054466084)支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>官方邮件(support@maxsso.net)支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>专属微信群/QQ群在线支持</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>集成解决方案咨询</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>技术培训</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>定制开发支持</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>客户化界面定制</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>紧急故障修复</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>支持服务</td>
|
||||||
|
<td>研发团队支持</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
@ -0,0 +1,614 @@
|
|||||||
|
---
|
||||||
|
title: 开源产品对比
|
||||||
|
---
|
||||||
|
|
||||||
|
<h2>MaxKey和Keycloak/CAS对比</h2>
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<th>模块</th><th>功能</th><th>MaxKey</th><th>Keycloak</th><th>Apereo CAS</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>OpenID Connect 1.0</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>插件</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>OAuth v2.0/2.1</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>插件</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>SAML V2.0</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>插件</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>CAS 1.0/2.0/3.0</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>JWT</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>定制</td>
|
||||||
|
<td>定制</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>TOKEN令牌支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>密码代填(FORMBASED)支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>API扩展支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>标准协议</td>
|
||||||
|
<td>扩展定制支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>定制</td>
|
||||||
|
<td>定制</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-图片验证码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>定制</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-短信验证码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-TOTP动态令牌</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>定制</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-邮件验证码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-社交账号登陆</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-企业微信、钉钉扫码登陆</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-双因素认证</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>定制</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-Active Directory用户登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-OpenLDAP用户登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户登录-Windows域认证</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>登录注销</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 应用访问权限控制</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>定制</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>密码修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>密码过期修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>首次登陆密码修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>找回密码</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>安全配置</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>用户信息修改</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>社交账号绑定</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>主题切换</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td>时间令牌</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>插件</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 应用账号管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 多种设备支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 用户登录日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 应用访问日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>认证服务</td>
|
||||||
|
<td> 管理日志</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>机构管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>用户管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>账号管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>应用管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>访问控制-角色管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>访问控制-角色成员管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>访问控制-访问控制管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>权限管理-资源管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>权限管理-权限管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-同步器管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-适配器管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>配置管理-密码策略</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>管理服务</td>
|
||||||
|
<td>管理端单点登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>REST接口机构和用户同步</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>SCIM2接口机构和用户同步</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>消息同步支持</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >生命周期管理</td><td colspan="5">同步器把存在上游系统的机构和账号同步到MaxKey</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>Active Directory同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>标准LDAP同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>企业微信同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>钉钉同步器</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >生命周期管理</td><td colspan="5">连接器把MaxKey的机构和账号同步到下游系统</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>Active Directory连接器</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>标准LDAP连接器</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>企业微信连接器</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>钉钉连接器</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>飞书连接器</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>生命周期管理</td>
|
||||||
|
<td>华为WeLink连接器</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>统计报表</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>管理日志审计</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>登录日志审计</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>应用访问日志审计</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>连接器日志审计</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>日志审计</td>
|
||||||
|
<td>同步器日志审计</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>JAVA SDK<br/>.NET SDK</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>支持多平台<br/>Windows<br/>LINUX<br/>UNIX</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>支持主流浏览器:<br/>Google Chrome <br/>Mozilla Firefox <br/> Internet Explorer 10 <br/>Microsoft Edge <br/>等</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>支持PC、平板PAD、手机Moblie</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>其他</td>
|
||||||
|
<td>开发集成指南</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>产品文档及安装配置(集群)</td>
|
||||||
|
<td><div class="icon">开源社区</div></td>
|
||||||
|
<td><div class="icon">开源社区</div></td>
|
||||||
|
<td><div class="icon">开源社区</div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>版本升级及BUG修复</td>
|
||||||
|
<td>开源社区</td>
|
||||||
|
<td>开源社区</td>
|
||||||
|
<td>开源社区</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>在线技术支持</td>
|
||||||
|
<td>官方QQ</td>
|
||||||
|
<td>✅</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>集成解决方案咨询</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>技术培训</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>定制开发支持</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>客户化界面定制</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>客户服务</td>
|
||||||
|
<td>紧急故障修复</td>
|
||||||
|
<td>企业版</td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>团队</td>
|
||||||
|
<td>研发团队</td>
|
||||||
|
<td>国内✅</td>
|
||||||
|
<td>国外</td>
|
||||||
|
<td>国外</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,297 @@
|
|||||||
|
---
|
||||||
|
title: 开发路线图
|
||||||
|
---
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<tr class="a roadmap">
|
||||||
|
<th class="table-col1">时间</th>
|
||||||
|
<th class="table-col2">计划</th>
|
||||||
|
<th class="table-col3">状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>2024Q2</td>
|
||||||
|
<td>权限管理优化</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2024Q2</td>
|
||||||
|
<td>数据同步优化</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2024Q1</td>
|
||||||
|
<td>增强身份管理 </td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Roadmap-2023
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<tr class="a roadmap">
|
||||||
|
<th class="table-col1">时间</th>
|
||||||
|
<th class="table-col2">计划</th>
|
||||||
|
<th class="table-col3">状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>2023Q3</td>
|
||||||
|
<td>Java 17+</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2023Q3</td>
|
||||||
|
<td>Jakarta EE 10+ </td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2023Q3</td>
|
||||||
|
<td>Spring Framework 6</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2023Q3</td>
|
||||||
|
<td>Spring Boot 3 </td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Roadmap-2022
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<tr class="a roadmap">
|
||||||
|
<th class="table-col1">时间</th>
|
||||||
|
<th class="table-col2">计划</th>
|
||||||
|
<th class="table-col3">状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>2022Q4</td>
|
||||||
|
<td>docker-compose部署优化</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q3</td>
|
||||||
|
<td>Spring Boot 2.7.x </td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q2</td>
|
||||||
|
<td>前后端分离</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q2</td>
|
||||||
|
<td>会话管理</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q2</td>
|
||||||
|
<td>二级缓存优化</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q2</td>
|
||||||
|
<td>Ant Design of Angular</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q2</td>
|
||||||
|
<td>OpenID Connect optimize</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q1</td>
|
||||||
|
<td>JWT optimize</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2022Q1</td>
|
||||||
|
<td>OAuth 2.1</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Roadmap-2021
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<tr class="a roadmap">
|
||||||
|
<th class="table-col1">时间</th>
|
||||||
|
<th class="table-col2">计划</th>
|
||||||
|
<th class="table-col3">状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q4</td>
|
||||||
|
<td>Zero trust scenario integration</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q4</td>
|
||||||
|
<td>腾讯iOA零信任产品适配</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q4</td>
|
||||||
|
<td>Bootstrap 5.x</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q4</td>
|
||||||
|
<td>SpringBoot 2.6.x</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q4</td>
|
||||||
|
<td>docker-compose支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q3</td>
|
||||||
|
<td>好雨科技Rainbond适配</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q3</td>
|
||||||
|
<td>Nacos支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2021Q3</td>
|
||||||
|
<td>Maxkey-Cloud (micro service support)</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2021Q3</td>
|
||||||
|
<td>Multi-Tenancy</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q2</td>
|
||||||
|
<td>国产数据库瀚高DB的适配</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q2</td>
|
||||||
|
<td>Microsoft Active Directory支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q2</td>
|
||||||
|
<td>SpringBoot 2.5.x</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2021Q1</td>
|
||||||
|
<td>Swagger文档支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Roadmap-2020
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<tr class="a roadmap">
|
||||||
|
<th class="table-col1">时间</th>
|
||||||
|
<th class="table-col2">计划</th>
|
||||||
|
<th class="table-col3">状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr >
|
||||||
|
<td>2020Q4</td>
|
||||||
|
<td>Docker部署支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2020Q3</td>
|
||||||
|
<td>SAML 2.0优化</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2020Q3</td>
|
||||||
|
<td>SCIM 2支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2020Q3</td>
|
||||||
|
<td>SpringBoot 2.4.x</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2020Q2</td>
|
||||||
|
<td>企业微信、钉钉、飞书扫码登录</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2020Q2</td>
|
||||||
|
<td>RBAC 基于角色的访问控制</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2020Q2</td>
|
||||||
|
<td>短信验证码支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2020Q1</td>
|
||||||
|
<td>CAS 1.0,2.0,3.0支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr >
|
||||||
|
<td>2020Q1</td>
|
||||||
|
<td>Bootstrap 4.x</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2020Q1</td>
|
||||||
|
<td>密码策略支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## Roadmap-2019
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<tr class="a roadmap">
|
||||||
|
<th class="table-col1">时间</th>
|
||||||
|
<th class="table-col2">计划</th>
|
||||||
|
<th class="table-col3">状态</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>2019Q4</td>
|
||||||
|
<td>SpringBoot 2.2.x</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2019Q4</td>
|
||||||
|
<td>OAuth 2.0支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2019Q4</td>
|
||||||
|
<td>SAML 2.0支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2019Q4</td>
|
||||||
|
<td>JWT支持</td>
|
||||||
|
<td>✅</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
@ -0,0 +1,216 @@
|
|||||||
|
---
|
||||||
|
title: 友情链接
|
||||||
|
---
|
||||||
|
# 友情链接
|
||||||
|
|
||||||
|
## Dromara成员
|
||||||
|
|
||||||
|
Dromara 致力于微服务云原生解决方案的组织。
|
||||||
|
|
||||||
|
<div class="row " >
|
||||||
|
<div class="friendly_links">
|
||||||
|
<a href="https://hutool.cn/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/hutool.jpg"
|
||||||
|
title="🍬小而全的Java工具类库,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="friendly_links">
|
||||||
|
<a href="https://sa-token.dev33.cn/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/sa-token.png"
|
||||||
|
title="一个轻量级 java 权限认证框架,让鉴权变得简单、优雅!"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="friendly_links">
|
||||||
|
<a href="https://hertzbeat.com/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/hertzbeat_brand.jpg" title="易用友好的云监控系统"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="friendly_links">
|
||||||
|
<a href="https://gitee.com/dromara/TLog" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/tlog2.png"
|
||||||
|
title="一个轻量级的分布式日志标记追踪神器,10分钟即可接入,自动对日志打标签完成微服务的链路追踪"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://gitee.com/dromara/liteFlow" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/liteflow.png"
|
||||||
|
title="轻量,快速,稳定,可编排的组件式流程引擎"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row " >
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://gitee.com/dromara/hmily" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/hmily.png" title="高性能一站式分布式事务解决方案。"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://gitee.com/dromara/myth" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/myth.png" title="可靠消息分布式事务解决方案。"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://cubic.jiagoujishu.com/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/cubic.png"
|
||||||
|
title="一站式问题定位平台,以agent的方式无侵入接入应用,完整集成arthas功能模块,致力于应用级监控,帮助开发人员快速定位问题"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="http://forest.dtflyx.com/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/forest-logo.png"
|
||||||
|
title="Forest能够帮助您使用更简单的方式编写Java的HTTP客户端" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://jpom.io/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/jpom.png"
|
||||||
|
title="一款简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row " >
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://su.usthe.com/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/sureness.png"
|
||||||
|
title="面向 REST API 的高性能认证鉴权框架"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://easy-es.cn/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/easy-es2.png"
|
||||||
|
title="🚀傻瓜级ElasticSearch搜索引擎ORM框架"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://gitee.com/dromara/northstar" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/northstar_logo.png"
|
||||||
|
title="Northstar盈富量化交易平台"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://gitee.com/dromara/Raincat" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/raincat.png" title="强一致性分布式事务解决方案。"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://plugins.sheng90.wang/fast-request/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/fast-request.gif"
|
||||||
|
title="Idea 版 Postman,为简化调试API而生"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row " >
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://www.jeesuite.com/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/mendmix.png" title="开源分布式云原生架构一站式解决方案"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://www.x-easypdf.cn" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/koalas-rpc2.png"
|
||||||
|
title="企业生产级百亿日PV高可用可拓展的RPC框架。"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://async.sizegang.cn/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/gobrs-async.png"
|
||||||
|
title="🔥 配置极简功能强大的异步任务动态编排框架"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://dynamictp.cn/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/dynamic-tp.png"
|
||||||
|
title="🔥🔥🔥 基于配置中心的轻量级动态可监控线程池"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://www.x-easypdf.cn" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/x-easypdf.png"
|
||||||
|
title="一个用搭积木的方式构建pdf的框架(基于pdfbox)"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row " >
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<a href="https://www.herodotus.cn/" target="_blank">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/dromara/dante-cloud2.png"
|
||||||
|
title="Dante-Cloud 是一款企业级微服务架构和服务能力开发平台。"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
## 友情链接
|
||||||
|
|
||||||
|
为 MaxKey 提供各种帮助和支持的朋友们,我们一起共奋进
|
||||||
|
|
||||||
|
<div class="row ">
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/gitee.png" title="gitee"/><br/>
|
||||||
|
<a href="https://gitee.com/" target="_blank"> gitee </a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/ccflowAD_Smaill.png" title="驰骋BPM官网" /><br/>
|
||||||
|
<a href="http://ccflow.org/?from=MaxKey" target="_blank"> 驰骋BPM </a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/denglu1.jpg" title="登录易®"/><br/>
|
||||||
|
<a href="https://www.denglu1.cn/?from=MaxKey" target="_blank"> 登录易</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/eolink.png"
|
||||||
|
title="广州银云信息科技有限公司"/><br/>
|
||||||
|
<a href="https://www.eolinker.com/?from=MaxKey" target="_blank">
|
||||||
|
Eolink
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/aizuda.png" /><br/>
|
||||||
|
<a href="http://aizuda.com/?from=MaxKey" target="_blank">爱组搭AiZuDa</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row " >
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/phalapi.png" title="phalapi"/><br/>
|
||||||
|
<a href="https://www.phalapi.net/" target="_blank">phalapi</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/uniadmin.jpg" title="uniadmin"/><br/>
|
||||||
|
<a href="https://uniadmin.jiangruyi.com/" target="_blank"> uniadmin</a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/collectiveoauth.png" title="CollectiveOAuth"/><br/>
|
||||||
|
<a href="https://codoc.rthinkingsoft.cn/" target="_blank"> CollectiveOAuth </a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/snowy_logo.png" title="Snowy"/><br/>
|
||||||
|
<a href="https://www.xiaonuo.vip/?from=MaxKey" target="_blank"> 小诺开源技术 </a>
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
<img src="https://www.maxkey.top/doc/images/partners/justauth.png" title="Justauth"/><br/>
|
||||||
|
<a href="https://justauth.wiki/?from=MaxKey" target="_blank"> Justauth </a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row " >
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
<div class=" friendly_links">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "关于",
|
||||||
|
"position": 1,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important Docusaurus concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"label": "侵权通告",
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "侵权通告."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
title: 关于Authing.cn在百度搜索关键字侵权的通告
|
||||||
|
---
|
||||||
|
|
||||||
|
## 版权归属
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统,谐音马克思的钥匙寓意是最大钥匙,是业界领先的企业级IAM身份管理和认证产品,支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统是Dromara开源组织旗下的产品,并在中国版权保护中心申请软件著作权,软件著作权软件名称为MaxKey单点登录认证系统,简称MaxKey单点登录。
|
||||||
|
|
||||||
|
## 侵权情况
|
||||||
|
|
||||||
|
**2021年11月20日**在百度搜索“**MaxKey单点登录认证系统**”关键字,发现以下的搜索结果:
|
||||||
|
|
||||||
|
结果1
|
||||||
|
<img src="/images/zqjy/1.png" alt=""/>
|
||||||
|
|
||||||
|
结果2
|
||||||
|
<img src="/images/zqjy/2.png" alt=""/>
|
||||||
|
|
||||||
|
结果3
|
||||||
|
|
||||||
|
<img src="/images/zqjy/3.png" alt=""/>
|
||||||
|
|
||||||
|
Authing(北京蒸汽记忆科技有限公司)旗下有产品和Dromara开源组织的MaxKey单点登录认证系统属于竞争关系,Authing明知故犯,误导了MaxKey单点登录认证系统的客户,侵害了Dromara开源组织的权益,触犯了《**中华人民共和国著作权法**》。
|
||||||
|
|
||||||
|
## 进展情况
|
||||||
|
|
||||||
|
2021年11月21日,联系Authing的负责人通知其进行整改
|
||||||
|
|
||||||
|
<img src="/images/zqjy/4.jpg" alt=""/>
|
||||||
|
|
||||||
|
**2021年11月28日**问题并未得到解决。
|
||||||
|
|
||||||
|
**2021年11月29日**,通过邮件《10910-关于maxkey单点登录认证系统关键字搜索的问题》告知百度公司存在的问题,同时按照百度要求提交软件著作权并申请百度品牌保护,保护的品牌为**MaxKey单点登录认证系统(MaxKey单点登录)**。
|
||||||
|
|
||||||
|
**截至2021年12月15日问题还未得到解决,特发此通告。**
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
title: 关于Authing.cn在百度搜索关键字侵权的进展通告-202207
|
||||||
|
---
|
||||||
|
|
||||||
|
## 版权归属
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统,谐音马克思的钥匙寓意是最大钥匙,是业界领先的IAM身份管理和认证产品,支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供安全、标准和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。
|
||||||
|
|
||||||
|
MaxKey单点登录认证系统是Dromara开源组织旗下的产品,并在中国版权保护中心申请软件著作权,软件著作权软件名称为MaxKey单点登录认证系统,简称MaxKey单点登录。
|
||||||
|
|
||||||
|
## 侵权情况
|
||||||
|
|
||||||
|
**2022年07月16日**在百度搜索“**MaxKey单点登录认证系统**”关键字,发现以下的搜索结果:
|
||||||
|
|
||||||
|
结果1
|
||||||
|
|
||||||
|
<img src="/images/zqjy2207/1.png" alt=""/>
|
||||||
|
|
||||||
|
结果2
|
||||||
|
|
||||||
|
<img src="/images/zqjy2207/2.png" alt=""/>
|
||||||
|
|
||||||
|
结果3
|
||||||
|
|
||||||
|
<img src="/images/zqjy2207/3.png" alt=""/>
|
||||||
|
|
||||||
|
Authing(北京蒸汽记忆科技有限公司)旗下有产品和Dromara开源组织的MaxKey单点登录认证系统属于竞争关系,Authing明知故犯,误导了MaxKey单点登录认证系统的客户,侵害了Dromara开源组织的权益,触犯了《**中华人民共和国著作权法**》。
|
||||||
|
|
||||||
|
## 进展情况
|
||||||
|
|
||||||
|
**2021年11月29日**,通过邮件《10910-关于maxkey单点登录认证系统关键字搜索的问题》告知百度公司存在的问题,同时按照百度要求提交软件著作权并申请百度品牌保护,保护的品牌为**MaxKey单点登录认证系统(MaxKey单点登录)**。
|
||||||
|
|
||||||
|
**截至2022年07月16日问题任未得到解决,特发此通告。**
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
|
||||||
|
};
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
slug: first-blog-post
|
||||||
|
title: First Blog Post
|
||||||
|
authors:
|
||||||
|
name: Gao Wei
|
||||||
|
title: Docusaurus Core Team
|
||||||
|
url: https://github.com/wgao19
|
||||||
|
image_url: https://github.com/wgao19.png
|
||||||
|
tags: [hola, docusaurus]
|
||||||
|
---
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
slug: long-blog-post
|
||||||
|
title: Long Blog Post
|
||||||
|
authors: endi
|
||||||
|
tags: [hello, docusaurus]
|
||||||
|
---
|
||||||
|
|
||||||
|
This is the summary of a very long blog post,
|
||||||
|
|
||||||
|
Use a `<!--` `truncate` `-->` comment to limit blog post size in the list view.
|
||||||
|
|
||||||
|
<!--truncate-->
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
slug: mdx-blog-post
|
||||||
|
title: MDX Blog Post
|
||||||
|
authors: [slorber]
|
||||||
|
tags: [docusaurus]
|
||||||
|
---
|
||||||
|
|
||||||
|
Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
|
||||||
|
Use the power of React to create interactive blog posts.
|
||||||
|
|
||||||
|
```js
|
||||||
|
<button onClick={() => alert('button clicked!')}>Click me!</button>
|
||||||
|
```
|
||||||
|
|
||||||
|
<button onClick={() => alert('button clicked!')}>Click me!</button>
|
||||||
|
|
||||||
|
:::
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 94 KiB |
@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
slug: welcome
|
||||||
|
title: Welcome
|
||||||
|
authors: [slorber, yangshun]
|
||||||
|
tags: [facebook, hello, docusaurus]
|
||||||
|
---
|
||||||
|
|
||||||
|
[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).
|
||||||
|
|
||||||
|
Simply add Markdown files (or folders) to the `blog` directory.
|
||||||
|
|
||||||
|
Regular blog authors can be added to `authors.yml`.
|
||||||
|
|
||||||
|
The blog post date can be extracted from filenames, such as:
|
||||||
|
|
||||||
|
- `2019-05-30-welcome.md`
|
||||||
|
- `2019-05-30-welcome/index.md`
|
||||||
|
|
||||||
|
A blog post folder can be convenient to co-locate blog post images:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The blog supports tags as well!
|
||||||
|
|
||||||
|
**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config.
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
endi:
|
||||||
|
name: Endilie Yacop Sucipto
|
||||||
|
title: Maintainer of Docusaurus
|
||||||
|
url: https://github.com/endiliey
|
||||||
|
image_url: https://github.com/endiliey.png
|
||||||
|
|
||||||
|
yangshun:
|
||||||
|
name: Yangshun Tay
|
||||||
|
title: Front End Engineer @ Facebook
|
||||||
|
url: https://github.com/yangshun
|
||||||
|
image_url: https://github.com/yangshun.png
|
||||||
|
|
||||||
|
slorber:
|
||||||
|
name: Sébastien Lorber
|
||||||
|
title: Docusaurus maintainer
|
||||||
|
url: https://sebastienlorber.com
|
||||||
|
image_url: https://github.com/slorber.png
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "单点登录",
|
||||||
|
"position": 6,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important Docusaurus concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,139 @@
|
|||||||
|
---
|
||||||
|
title: 常用应用列表
|
||||||
|
sidebar_position: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
## 常用应用列表
|
||||||
|
|
||||||
|
MaxKey与常用应用集成,持续更新。。。
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>应用名称</th><th>图标</th><th>类型</th><th>文档</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>阿里云</td>
|
||||||
|
<td><img src="/images/inteapps/al_aly.gif" width="100px"/></td>
|
||||||
|
<td>SAAS(云服务)</td>
|
||||||
|
<td><a href="/docs/am/sso/saml_aly" target="_blank">集成指南</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>腾讯云</td>
|
||||||
|
<td><img src="/images/inteapps/tx_txy.gif" width="100px" /></td>
|
||||||
|
<td>SAAS(云服务)</td>
|
||||||
|
<td><a href="/docs/am/sso/saml_txy" target="_blank">集成指南</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>华为云</td>
|
||||||
|
<td><img src="/images/inteapps/hw_hwy.gif" width="100px" /></td>
|
||||||
|
<td>SAAS(云服务)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>SalesForce</td>
|
||||||
|
<td><img src="/images/inteapps/salesforce_crm.gif" width="100px" /></td>
|
||||||
|
<td>SAAS(云服务)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>腾讯企业邮箱</td>
|
||||||
|
<td><img src="/images/inteapps/tx_email.gif" width="100px" /></td>
|
||||||
|
<td>SAAS(云服务)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>华为云速邮箱</td>
|
||||||
|
<td><img src="/images/inteapps/hw_ysmail.gif" width="100px" /></td>
|
||||||
|
<td>SAAS(云服务)</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>泛微OA</td>
|
||||||
|
<td><img src="/images/inteapps/weaver_oa.gif" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>O2OA</td>
|
||||||
|
<td><img src="/images/inteapps/o2oa.gif" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>GitLab</td>
|
||||||
|
<td><img src="/images/inteapps/gitlab.gif" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td><a href="/docs/am/integration/gitlab" target="_blank">集成指南</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>JumpServer</td>
|
||||||
|
<td><img src="/images/inteapps/jumpserver.gif" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ZABBIX</td>
|
||||||
|
<td><img src="/images/inteapps/zabbix.png" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Kubernetes</td>
|
||||||
|
<td><img src="/images/inteapps/k8s.png" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Apache Knox</td>
|
||||||
|
<td><img src="/images/inteapps/knox.png" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Apache APISIX</td>
|
||||||
|
<td><img src="/images/inteapps/apisix.png" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Jenkins</td>
|
||||||
|
<td><img src="/images/inteapps/jenkins.gif" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td><a href="/docs/am/integration/jenkins" target="_blank">集成指南</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Liferay Portal</td>
|
||||||
|
<td><img src="/images/inteapps/liferay.gif" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Grafana</td>
|
||||||
|
<td><img src="/images/inteapps/grafana.png" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>禅道项目管理</td>
|
||||||
|
<td><img src="/images/inteapps/zentao_pm.gif" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td><a href="/docs/am/integration/zentao" target="_blank">集成指南</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Atlassian Confluence</td>
|
||||||
|
<td><img src="/images/inteapps/atlassian_confluence.png" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Atlassian Jira</td>
|
||||||
|
<td><img src="/images/inteapps/atlassian_jira.png" width="100px" /></td>
|
||||||
|
<td>企业应用</td>
|
||||||
|
<td><a href="/docs/am/integration/jira" target="_blank">集成指南</a></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "应用集成",
|
||||||
|
"position": 3,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,113 @@
|
|||||||
|
---
|
||||||
|
title: GitLab集成指南
|
||||||
|
sidebar_position: 7
|
||||||
|
---
|
||||||
|
|
||||||
|
## GitLab 介绍
|
||||||
|
|
||||||
|
GitLab 是由 GitLab Inc.开发,使⽤ MIT 许可证的基于⽹络的 Git 仓库管理⼯具,且具有 wiki 和 issue
|
||||||
|
跟踪功能。使⽤ Git 作为代码管理⼯具,并在此基础上搭建起来的 web 服务。
|
||||||
|
|
||||||
|
官⽅⽹站地址:https://about.gitlab.com/
|
||||||
|
|
||||||
|
## GitLab 安装配置
|
||||||
|
|
||||||
|
### GitLab 安装
|
||||||
|
|
||||||
|
请参照官⽅⽂档 https://about.gitlab.com/install/
|
||||||
|
|
||||||
|
### 配置
|
||||||
|
|
||||||
|
具体可参照 https://docs.gitlab.com/ee/integration/oauth_provider.html
|
||||||
|
|
||||||
|
编辑 gitlab.rb
|
||||||
|
|
||||||
|
```sh
|
||||||
|
vim /etc/gitlab/gitlab.rb
|
||||||
|
```
|
||||||
|
|
||||||
|
增加 Oauth 配置:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
gitlab_rails['omniauth_enabled'] = true
|
||||||
|
gitlab_rails['omniauth_allow_single_sign_on'] = ['oauth2_generic'] #跟下⾯的 name 对应,不建议修改
|
||||||
|
gitlab_rails['omniauth_block_auto_created_users'] = false # 是否⾃动创建账号
|
||||||
|
gitlab_rails['omniauth_providers'] = [
|
||||||
|
{
|
||||||
|
'name' => 'oauth2_generic', #此处跟maxke配置的回调地址有关系
|
||||||
|
'label': 'SSO', # 此处显示在 SSO 授权登录的名称
|
||||||
|
// highlight-start
|
||||||
|
'app_id' => '9cdbccbe-47a0-4adb-9d3d-7e0eceacaace',
|
||||||
|
'app_secret' => 'F3QOMTUwMzIwMjExMTMyMTAzNDknMW',
|
||||||
|
// highlight-end
|
||||||
|
'args' => {
|
||||||
|
client_options: {
|
||||||
|
// highlight-start
|
||||||
|
'site' => 'http://yourdomain', # maxkey 认证端的域名
|
||||||
|
'authorize_url'=>'/sign/authz/oauth/v20/authorize',
|
||||||
|
'token_url'=>'/sign/authz/oauth/v20/token',
|
||||||
|
'user_info_url' => '/sign/api/oauth/v20/me'
|
||||||
|
// highlight-end
|
||||||
|
},
|
||||||
|
user_response_structure: {
|
||||||
|
root_path: [],
|
||||||
|
// highlight-start
|
||||||
|
id_path: ['username'],
|
||||||
|
// highlight-end
|
||||||
|
attributes: { name: 'realname', email: 'username'}
|
||||||
|
},
|
||||||
|
#name: 'maxkey',
|
||||||
|
strategy_class: "OmniAuth::Strategies::OAuth2Generic"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
配置⽂件修改完成后, 重设配置:
|
||||||
|
```
|
||||||
|
gitlab-ctl reconfigure
|
||||||
|
```
|
||||||
|
|
||||||
|
重设完毕, 等待约 30 秒。
|
||||||
|
|
||||||
|
重新启动 gitliab
|
||||||
|
```
|
||||||
|
gitlab-ctl restart
|
||||||
|
```
|
||||||
|
|
||||||
|
### 创建账号
|
||||||
|
....略
|
||||||
|
|
||||||
|
### 创建⼀个账号 maxkey
|
||||||
|
....略
|
||||||
|
|
||||||
|
### 关联 Gitlab 账号
|
||||||
|
|
||||||
|
⽤户登录 gitlab 之后, 在 setting-Account 中点击 Connect 进⾏账户关联。
|
||||||
|
<img src="/doc/images/integration/gitlab/1.png" />
|
||||||
|
|
||||||
|
<img src="/doc/images/integration/gitlab/2.png" />
|
||||||
|
|
||||||
|
关联成功后, 即可使⽤登录⻚的 Oauth2 登录。
|
||||||
|
|
||||||
|
### 注意事项
|
||||||
|
Gitlab 必须要⼿动关联后, 才可单点登录。
|
||||||
|
https 需要配置 omiauth 的 provider_ignores_state:true, 同时需要把 maxkey 的证书放到 gitlab 的
|
||||||
|
trusted-certs 下, 然后 重新配置 gitlab-ctl reconfigure 就好了。
|
||||||
|
|
||||||
|
## MaxKey 配置及登录验证
|
||||||
|
|
||||||
|
### 应⽤配置
|
||||||
|
|
||||||
|
进⼊后台"应⽤管理" ,编辑应⽤
|
||||||
|
<img src="/doc/images/integration/gitlab/3.png" />
|
||||||
|
|
||||||
|
进入"OAuth2.0 配置",配置如下
|
||||||
|
<img src="/doc/images/integration/gitlab/4.png" />
|
||||||
|
|
||||||
|
### 应⽤访问赋权
|
||||||
|
|
||||||
|
如果不在该列表内,可以“新增成员”
|
||||||
|
|
||||||
|
### 单点登录验证
|
||||||
|
|
||||||
|
重新登录 MaxKey,点击"Gitlab"图标单点登录
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
a 1
|
||||||
|
b 2
|
||||||
|
c 3
|
||||||
|
d 4
|
||||||
|
e 5
|
||||||
|
f 6
|
||||||
|
g 7
|
||||||
|
h 8
|
||||||
|
i 9
|
||||||
|
j 10
|
||||||
|
k 11
|
||||||
|
l 12
|
||||||
|
m 13
|
||||||
|
n 14
|
||||||
|
o 15
|
||||||
|
p 16
|
||||||
|
q 17
|
||||||
|
r 18
|
||||||
|
s 19
|
||||||
|
t 20
|
||||||
|
u 21
|
||||||
|
v 22
|
||||||
|
w 23
|
||||||
|
x 24
|
||||||
|
y 25
|
||||||
|
z 26
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
title: Jenkins集成指南
|
||||||
|
sidebar_position: 10
|
||||||
|
---
|
||||||
|
|
||||||
|
## Jenkins 介绍
|
||||||
|
Jenkins 是⼀个开源软件项⽬,是基于 Java 开发的⼀种持续集成⼯具,⽤于监控持续重 复的⼯作,
|
||||||
|
旨在提供⼀个开放易⽤的软件平台,使软件的持续集成变成可能。
|
||||||
|
|
||||||
|
Jenkins 是⼀个功能强⼤的应⽤程序,允许持续集成和持续交付项⽬,⽆论⽤的是什么 平台。这是
|
||||||
|
⼀个免费的源代码,可以处理任何类型的构建或持续集成。集成 Jenkins 可以⽤ 于⼀些测试和部署
|
||||||
|
技术。
|
||||||
|
|
||||||
|
Jenkins 是⼀种软件允许持续集成。Jenkins 安装在⼀台服务上也中央构建发⽣的地⽅。
|
||||||
|
|
||||||
|
官⽅⽹站地址:https://www.jenkins.io/
|
||||||
|
|
||||||
|
## Jenkins 安装配置
|
||||||
|
### Jenkins 安装
|
||||||
|
请参照官⽅⽂档 https://www.jenkins.io/doc/book/installing/
|
||||||
|
|
||||||
|
### 认证插件安装
|
||||||
|
登录 jenkins 安装 cas-plugin
|
||||||
|
|
||||||
|
参⻅⽂档 https://plugins.jenkins.io/cas-plugin/
|
||||||
|
<img src="/doc/images/integration/jenkins/1.png" />
|
||||||
|
|
||||||
|
### 认证配置
|
||||||
|
配置认证服务, 进⼊Configure Global Security, 具体配置⼊下
|
||||||
|
<img src="/doc/images/integration/jenkins/2.png" />
|
||||||
|
|
||||||
|
备注:配置的URL为:http://yourdomain/sign/authz/cas/
|
||||||
|
|
||||||
|
## MaxKey 配置及登录验证
|
||||||
|
### 应⽤配置
|
||||||
|
进⼊后台"应⽤管理" ,编辑应⽤
|
||||||
|
<img src="/doc/images/integration/jenkins/3.png" />
|
||||||
|
|
||||||
|
进入"CAS配置",配置如下
|
||||||
|
<img src="/doc/images/integration/jenkins/4.png" />
|
||||||
|
|
||||||
|
### 应⽤访问赋权
|
||||||
|
如果不在该列表内,可以“新增成员”
|
||||||
|
|
||||||
|
### 单点登录验证
|
||||||
|
重新登录MaxKey,点击"Jenkins"图标单点登录
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
title: Jira集成指南
|
||||||
|
sidebar_position: 10
|
||||||
|
---
|
||||||
|
|
||||||
|
## Atlassian Jira介绍
|
||||||
|
JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。
|
||||||
|
|
||||||
|
JIRA中配置灵活、功能全面、部署简单、扩展丰富,其超过150项特性得到了全球115个国家超过19,000家客户的认可。
|
||||||
|
|
||||||
|
官方网站地址:https://www.atlassian.com/software/jira
|
||||||
|
|
||||||
|
## Jira安装配置
|
||||||
|
### Jira 安装
|
||||||
|
请参照官方文档
|
||||||
|
https://confluence.atlassian.com/adminjiraserver0813/installing-jira-applications-1027137422.html
|
||||||
|
|
||||||
|
安装路径D:\MaxKey\3party\Jira8.13.10
|
||||||
|
|
||||||
|
数据路径D:\MaxKey\3party\Jira8.13.10_data
|
||||||
|
|
||||||
|
### Jira启动https
|
||||||
|
修改D:\MaxKey\3party\Jira8.13.10\conf
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
|
||||||
|
maxHttpHeaderSize="8192" SSLEnabled="true"
|
||||||
|
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
|
||||||
|
enableLookups="false" disableUploadTimeout="true"
|
||||||
|
acceptCount="100" scheme="https" secure="true"
|
||||||
|
// highlight-start
|
||||||
|
keystoreFile="D:/MaxKey/3party/Jira8.13.10/conf/maxkeyserver.keystore" keystorePass="maxkey"
|
||||||
|
// highlight-end
|
||||||
|
clientAuth="false" sslProtocol="TLS" useBodyEncodingForURI="true"/>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 认证配置
|
||||||
|
配置认证服务,进入Jira,具体配置入下
|
||||||
|
<img src="/doc/images/integration/jira/1.png" />
|
||||||
|
<img src="/doc/images/integration/jira/2.png" />
|
||||||
|
<img src="/doc/images/integration/jira/3.png" />
|
||||||
|
基本URL更改为https://jira.maxkey.top:8443
|
||||||
|
|
||||||
|
<img src="/doc/images/integration/jira/4.png" />
|
||||||
|
<img src="/doc/images/integration/jira/5.png" />
|
||||||
|
|
||||||
|
备注:
|
||||||
|
|
||||||
|
单一登录发行者:http://yourdomain/sign/saml
|
||||||
|
|
||||||
|
身份提供者单一登录URL:http://yourdomain/sign/authz/saml20/{appid}
|
||||||
|
|
||||||
|
用户名映射:```{NameID}```
|
||||||
|
|
||||||
|
## MaxKey 配置及登录验证
|
||||||
|
### 应⽤配置
|
||||||
|
进⼊后台"应⽤管理" ,编辑应⽤
|
||||||
|
<img src="/doc/images/integration/jira/6.png" />
|
||||||
|
|
||||||
|
进入"SAML配置",配置如下
|
||||||
|
<img src="/doc/images/integration/jira/7.png" />
|
||||||
|
|
||||||
|
### 应⽤访问赋权
|
||||||
|
如果不在该列表内,可以“新增成员”
|
||||||
|
|
||||||
|
### 单点登录验证
|
||||||
|
重新登录MaxKey,点击“Jira”图标单点登录
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
---
|
||||||
|
title: 禅道项目管理集成指南
|
||||||
|
sidebar_position: 26
|
||||||
|
---
|
||||||
|
|
||||||
|
## 禅道(ZenTao) 介绍
|
||||||
|
禅道是第一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。
|
||||||
|
|
||||||
|
官方网站地址:https://www.zentao.net/
|
||||||
|
|
||||||
|
## 安装配置
|
||||||
|
禅道11.5.1版本开始,增加第三方应用免密登录禅道的功能
|
||||||
|
|
||||||
|
具体单点登录的方案
|
||||||
|
|
||||||
|
https://www.zentao.net/book/zentaopmshelp/344.html
|
||||||
|
|
||||||
|
软件下载
|
||||||
|
|
||||||
|
https://www.zentao.net/download.html
|
||||||
|
|
||||||
|
ZenTaoPMS.***.win**.exe
|
||||||
|
|
||||||
|
在window本地安装
|
||||||
|
|
||||||
|
安装完成后目录
|
||||||
|
<img src="/doc/images/integration/zentao/1.png" />
|
||||||
|
|
||||||
|
运行start.exe
|
||||||
|
|
||||||
|
点击“服务”,修改端口避免和maxkey冲突
|
||||||
|
<img src="/doc/images/integration/zentao/2.png" />
|
||||||
|
|
||||||
|
去掉”启用Apache用户访问验证”,后“启动禅道”
|
||||||
|
<img src="/doc/images/integration/zentao/3.png" />
|
||||||
|
|
||||||
|
## 禅道配置免密登录禅道
|
||||||
|
https://www.zentao.net/book/zentaopmshelp/344.html
|
||||||
|
|
||||||
|
禅道11.5.1版本开始,增加第三方应用免密登录禅道的功能。
|
||||||
|
|
||||||
|
下面,我们来介绍一下免密登录的具体配置。
|
||||||
|
|
||||||
|
### 添加应用,开启免密登录
|
||||||
|
|
||||||
|
登录禅道,到后台--二次开发--应用,添加应用时开启免密登录。
|
||||||
|
|
||||||
|
只有免密登录,选择开启后方可使用。
|
||||||
|
|
||||||
|
<img src="/doc/images/integration/zentao/4.png" />
|
||||||
|
|
||||||
|
### 免密登录的签名机制
|
||||||
|
以图中红框内容为例,假设你的禅道访问地址为www.zentao.net 或者 http://47.105.128.128/biz 。
|
||||||
|
|
||||||
|
我们的请求格式则为:
|
||||||
|
|
||||||
|
http://www.zentao.net/api.php?m=user&f=apilogin&account=account&code=test&time=timestamp&token=token
|
||||||
|
|
||||||
|
或者
|
||||||
|
|
||||||
|
http://47.105.128.128/biz/api.php?m=user&f=apilogin&account=account&code=test&time=timestamp&token=token
|
||||||
|
|
||||||
|
<img src="/doc/images/integration/zentao/5.png" />
|
||||||
|
|
||||||
|
说明:
|
||||||
|
|
||||||
|
m:模块名,是固定的,不可更改。
|
||||||
|
|
||||||
|
f :方法名, 是固定的,不可更改。
|
||||||
|
|
||||||
|
account:你想要登录的用户名,该用户需存在于禅道系统中。
|
||||||
|
|
||||||
|
code:应用代号。
|
||||||
|
|
||||||
|
time:当前时间戳,php可用time()函数获取。时间戳只一次有效,下次免密登录时,需要刷新页面。
|
||||||
|
|
||||||
|
token:算法为:code、应用密钥、time()字符串合并,再进行 md5 加密。
|
||||||
|
|
||||||
|
```
|
||||||
|
$code = 'test';
|
||||||
|
$key = 'a5246932b0f371263c252384076cd3f0';
|
||||||
|
$time = '1557034496';
|
||||||
|
$token = md5($code . $key . $time);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 错误提示
|
||||||
|
401 缺少参数或应用未设置密钥
|
||||||
|
|
||||||
|
403 被限制访问
|
||||||
|
|
||||||
|
404 应用不存在
|
||||||
|
|
||||||
|
405 token已失效
|
||||||
|
|
||||||
|
406 用户不存在
|
||||||
|
|
||||||
|
407 错误的时间戳
|
||||||
|
|
||||||
|
## MaxKey 配置及登录验证
|
||||||
|
### 应⽤配置
|
||||||
|
进⼊后台"应⽤管理" ,编辑应⽤
|
||||||
|
<img src="/doc/images/integration/zentao/6.png" />
|
||||||
|
|
||||||
|
"API配置",配置如下
|
||||||
|
<img src="/doc/images/integration/zentao/7.png" />
|
||||||
|
|
||||||
|
"扩展配置",配置如下
|
||||||
|
<img src="/doc/images/integration/zentao/8.png" />
|
||||||
|
|
||||||
|
### 应⽤访问赋权
|
||||||
|
如果不在该列表内,可以“新增成员”
|
||||||
|
|
||||||
|
### 单点登录验证
|
||||||
|
重新登录MaxKey,点击"Jenkins"图标单点登录
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "标准协议",
|
||||||
|
"position": 2,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "CAS协议集成",
|
||||||
|
"position": 3,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
title: CAS协议集成
|
||||||
|
---
|
||||||
|
# CAS应用集成
|
||||||
|
本文介绍CAS应用如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
## 应用注册
|
||||||
|
|
||||||
|
应用在MaxKey管理系统进行注册,注册的配置信息如下
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,365 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
title: CAS Java应用集成
|
||||||
|
---
|
||||||
|
# CAS Java应用集成
|
||||||
|
|
||||||
|
## CAS客户端配置
|
||||||
|
|
||||||
|
本文使用JAVA WEB程序为例
|
||||||
|
|
||||||
|
源代码地址
|
||||||
|
|
||||||
|
https://github.com/MaxKeyTop/MaxKey-Demo/blob/master/maxkey-demo-cas
|
||||||
|
|
||||||
|
|
||||||
|
### 引入依赖包
|
||||||
|
|
||||||
|
jar包依赖如下
|
||||||
|
|
||||||
|
```java
|
||||||
|
cas-client-core-3.2.1.jar
|
||||||
|
commons-codec-1.9.jar
|
||||||
|
commons-io-2.2.jar
|
||||||
|
commons-logging-1.1.1.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### web.xml配置
|
||||||
|
```xml
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<web-app>
|
||||||
|
<display-name></display-name>
|
||||||
|
<listener>
|
||||||
|
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
|
||||||
|
</listener>
|
||||||
|
<filter>
|
||||||
|
<filter-name>CAS Single Sign Out Filter</filter-name>
|
||||||
|
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>CAS Single Sign Out Filter</filter-name>
|
||||||
|
<url-pattern>/index.jsp</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
<filter>
|
||||||
|
<filter-name>CAS Filter</filter-name>
|
||||||
|
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
|
||||||
|
<!-- cas server login url -->
|
||||||
|
<init-param>
|
||||||
|
<param-name>casServerLoginUrl</param-name>
|
||||||
|
<param-value>http://sso.maxkey.top/sign/authz/cas/login</param-value>
|
||||||
|
</init-param>
|
||||||
|
<!-- cas client url, in end of url / is required -->
|
||||||
|
<init-param>
|
||||||
|
<param-name>serverName</param-name>
|
||||||
|
<param-value>http://cas.demo.maxkey.top:8080/</param-value>
|
||||||
|
</init-param>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>CAS Filter</filter-name>
|
||||||
|
<url-pattern>/index.jsp</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
<!-- Cas10TicketValidationFilter Cas20ProxyReceivingTicketValidationFilter -->
|
||||||
|
<filter>
|
||||||
|
<filter-name>CAS Validation Filter</filter-name>
|
||||||
|
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
|
||||||
|
<!-- cas server Validation url -->
|
||||||
|
<init-param>
|
||||||
|
<param-name>casServerUrlPrefix</param-name>
|
||||||
|
<param-value>http://sso.maxkey.top/sign/authz/cas/</param-value>
|
||||||
|
</init-param>
|
||||||
|
<!-- cas client url -->
|
||||||
|
<init-param>
|
||||||
|
<param-name>serverName</param-name>
|
||||||
|
<param-value>http://cas.demo.maxkey.top:8080/</param-value>
|
||||||
|
</init-param>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>CAS Validation Filter</filter-name>
|
||||||
|
<url-pattern>/index.jsp</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
<filter>
|
||||||
|
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
|
||||||
|
<filter-class>
|
||||||
|
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
|
||||||
|
</filter-class>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
|
||||||
|
<url-pattern>/index.jsp</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
<filter>
|
||||||
|
<filter-name>CAS Assertion Thread Local Filter</filter-name>
|
||||||
|
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>CAS Assertion Thread Local Filter</filter-name>
|
||||||
|
<url-pattern>/index.jsp</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
<welcome-file-list>
|
||||||
|
<welcome-file>index.jsp</welcome-file>
|
||||||
|
</welcome-file-list>
|
||||||
|
</web-app>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 获取登录名及用户属性
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
|
||||||
|
<%@ page language="java" import="java.util.Map.Entry" %>
|
||||||
|
<%@ page language="java" import="org.apache.commons.codec.binary.Base64" %>
|
||||||
|
<%@ page language="java" import="org.jasig.cas.client.authentication.AttributePrincipal" %>
|
||||||
|
<%@ page language="java" import="org.jasig.cas.client.validation.Assertion" %>
|
||||||
|
<%@ page language="java" import="org.jasig.cas.client.util.AbstractCasFilter" %>
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
|
||||||
|
System.out.println("CAS Assertion Success . ");
|
||||||
|
Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
|
||||||
|
String username= assertion.getPrincipal().getName();
|
||||||
|
%>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
<title>Demo CAS</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="CAS Demo">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="<%=basePath %>/images/favicon.ico"/>
|
||||||
|
<style type="text/css">
|
||||||
|
body{
|
||||||
|
margin: 0;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding: 0 0 0 0px;
|
||||||
|
font-size: 12px;
|
||||||
|
text-align:center;
|
||||||
|
float:center;
|
||||||
|
font-family: "Arial", "Helvetica", "Verdana", "sans-serif";
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
width: 990px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding: 0 10px
|
||||||
|
}
|
||||||
|
table.datatable {
|
||||||
|
border: 1px solid #d8dcdf;
|
||||||
|
border-collapse:collapse;
|
||||||
|
border-spacing:0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.datatable th{
|
||||||
|
border: 1px solid #d8dcdf;
|
||||||
|
border-collapse:collapse;
|
||||||
|
border-spacing:0;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table.datatable td{
|
||||||
|
border: 1px solid #d8dcdf;
|
||||||
|
border-collapse:collapse;
|
||||||
|
border-spacing:0;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.datatable td.title{
|
||||||
|
text-align: center;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<table class="datatable">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="title">CAS Demo for MaxKey</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>CAS Logo</td>
|
||||||
|
<td> <img src="<%=basePath %>/images/cas.png"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="50%">CAS Assertion</td>
|
||||||
|
<td><%=username %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>CAS Has Attributes </td>
|
||||||
|
<td><%=!assertion.getPrincipal().getAttributes().isEmpty() %> size : <%=assertion.getPrincipal().getAttributes().size() %></td>
|
||||||
|
</tr>
|
||||||
|
<%
|
||||||
|
Map<String, Object> attMap = assertion.getPrincipal().getAttributes();
|
||||||
|
for (Entry<String, Object> entry : attMap.entrySet()) {
|
||||||
|
String attributeValue=entry.getValue()==null?"":entry.getValue().toString();
|
||||||
|
System.out.println("attributeValue : "+attributeValue);
|
||||||
|
if(attributeValue.startsWith("base64:")){
|
||||||
|
attributeValue=new String(Base64.decodeBase64(attributeValue.substring("base64:".length())),"UTF-8");
|
||||||
|
}
|
||||||
|
%>
|
||||||
|
<tr>
|
||||||
|
<td>CAS <%=entry.getKey() %> </td>
|
||||||
|
<td><%=attributeValue %></td>
|
||||||
|
</tr>
|
||||||
|
<%}%>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## SpringBoot CAS配置
|
||||||
|
|
||||||
|
源代码地址
|
||||||
|
|
||||||
|
https://github.com/MaxKeyTop/MaxKey-SpringBoot4CAS-demo
|
||||||
|
|
||||||
|
|
||||||
|
demo分别写了三个请求:拦截请求 test1/index,test1/index1 以及不拦截请求test1/index2,
|
||||||
|
|
||||||
|
### 引入依赖包
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.unicon.cas</groupId>
|
||||||
|
<artifactId>cas-client-autoconfig-support</artifactId>
|
||||||
|
<version>2.3.0-GA</version>
|
||||||
|
</dependency>
|
||||||
|
```
|
||||||
|
|
||||||
|
### SpringBoot配置
|
||||||
|
|
||||||
|
```
|
||||||
|
server:
|
||||||
|
port: 8989
|
||||||
|
cas:
|
||||||
|
# cas服务端地址
|
||||||
|
server-url-prefix: http://sso.maxkey.top/sign/authz/cas/
|
||||||
|
# cas服务端登陆地址
|
||||||
|
server-login-url: http://sso.maxkey.top/sign/authz/cas/login
|
||||||
|
# 客户端访问地址
|
||||||
|
client-host-url: http://localhost:8989/
|
||||||
|
# 认证方式,默认cas
|
||||||
|
validation-type: cas
|
||||||
|
# 客户端需要拦截的URL地址
|
||||||
|
authentication-url-patterns:
|
||||||
|
- /test1/index
|
||||||
|
- /test1/index1
|
||||||
|
```
|
||||||
|
|
||||||
|
扩展配置项
|
||||||
|
```
|
||||||
|
cas.authentication-url-patterns
|
||||||
|
cas.validation-url-patterns
|
||||||
|
cas.request-wrapper-url-patterns
|
||||||
|
cas.assertion-thread-local-url-patterns
|
||||||
|
cas.gateway
|
||||||
|
cas.use-session
|
||||||
|
cas.redirect-after-validation
|
||||||
|
cas.allowed-proxy-chains
|
||||||
|
cas.proxy-callback-url
|
||||||
|
cas.proxy-receptor-url
|
||||||
|
cas.accept-any-proxy
|
||||||
|
server.context-parameters.renew
|
||||||
|
```
|
||||||
|
|
||||||
|
### CAS注解
|
||||||
|
在application启动类上加上 @EnableCasClient 注解
|
||||||
|
|
||||||
|
```java
|
||||||
|
@SpringBootApplication
|
||||||
|
@EnableCasClient
|
||||||
|
public class DemoApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(DemoApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 获取登录用户信息
|
||||||
|
|
||||||
|
```java
|
||||||
|
@GetMapping("test1/index1")
|
||||||
|
public String index1(HttpServletRequest request){
|
||||||
|
String token =request.getParameter("token");
|
||||||
|
System.out.println("token : "+token);
|
||||||
|
Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
|
||||||
|
|
||||||
|
String username= assertion.getPrincipal().getName();
|
||||||
|
System.out.println(username);
|
||||||
|
|
||||||
|
return "test index cas拦截正常,登录账号:"+username;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## CAS REST登录
|
||||||
|
|
||||||
|
```java
|
||||||
|
package org.maxkey.web.authorize.endpoint;
|
||||||
|
|
||||||
|
import org.pac4j.cas.profile.CasRestProfile;
|
||||||
|
import org.pac4j.cas.client.rest.CasRestFormClient;
|
||||||
|
import org.pac4j.cas.config.CasConfiguration;
|
||||||
|
import org.pac4j.cas.credentials.authenticator.CasRestAuthenticator;
|
||||||
|
import org.pac4j.cas.profile.CasProfile;
|
||||||
|
import org.pac4j.core.context.J2EContext;
|
||||||
|
import org.pac4j.core.context.WebContext;
|
||||||
|
import org.pac4j.core.credentials.TokenCredentials;
|
||||||
|
import org.pac4j.core.credentials.UsernamePasswordCredentials;
|
||||||
|
import org.pac4j.core.exception.HttpAction;
|
||||||
|
import org.springframework.mock.web.MockHttpServletRequest;
|
||||||
|
import org.springframework.mock.web.MockHttpServletResponse;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
//https://apereo.github.io/cas/6.0.x/protocol/REST-Protocol.html
|
||||||
|
|
||||||
|
public class RestTestClient {
|
||||||
|
|
||||||
|
public static void main(String[] args ) throws HttpAction {
|
||||||
|
final String casUrlPrefix = "http://sso.maxkey.top/sign/authz/cas/";
|
||||||
|
String username ="admin";
|
||||||
|
String password ="maxkey";
|
||||||
|
String serviceUrl = "http://cas.demo.maxkey.top:8080/demo-cas/";
|
||||||
|
CasConfiguration casConfiguration = new CasConfiguration(casUrlPrefix);
|
||||||
|
final CasRestAuthenticator authenticator = new CasRestAuthenticator(casConfiguration);
|
||||||
|
final CasRestFormClient client = new CasRestFormClient(casConfiguration,"username","password");
|
||||||
|
final MockHttpServletRequest request = new MockHttpServletRequest();
|
||||||
|
final MockHttpServletResponse response = new MockHttpServletResponse();
|
||||||
|
|
||||||
|
final WebContext webContext = new J2EContext(request, response);
|
||||||
|
casConfiguration.init();
|
||||||
|
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username,password);
|
||||||
|
CasRestAuthenticator restAuthenticator = new CasRestAuthenticator(casConfiguration);
|
||||||
|
// authenticate with credentials (validate credentials)
|
||||||
|
restAuthenticator.validate(credentials, webContext);
|
||||||
|
final CasRestProfile profile = (CasRestProfile) credentials.getUserProfile();
|
||||||
|
// get service ticket
|
||||||
|
final TokenCredentials casCredentials = client.requestServiceTicket(serviceUrl, profile, webContext);
|
||||||
|
// validate service ticket
|
||||||
|
final CasProfile casProfile = client.validateServiceTicket(serviceUrl, casCredentials, webContext);
|
||||||
|
|
||||||
|
Map<String,Object> attributes = casProfile.getAttributes();
|
||||||
|
Set<Map.Entry<String,Object>> mapEntries = attributes.entrySet();
|
||||||
|
for (Map.Entry entry : mapEntries) {
|
||||||
|
System.out.println(entry.getKey() + ":" + entry.getValue());
|
||||||
|
}
|
||||||
|
client.destroyTicketGrantingTicket(profile,webContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
详细见请参考
|
||||||
|
|
||||||
|
https://github.com/MaxKeyTop/MaxKey/blob/master/maxkey-protocols/maxkey-protocol-cas/src/test/java/org/maxkey/web/authorize/endpoint/RestTestClient.java
|
||||||
@ -0,0 +1,132 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
title: CAS Python应用集成
|
||||||
|
---
|
||||||
|
# CAS Python应用集成
|
||||||
|
|
||||||
|
## CAS客户端配置
|
||||||
|
|
||||||
|
本文使用Python程序为例
|
||||||
|
|
||||||
|
### 前置条件
|
||||||
|
|
||||||
|
Python以其简洁的语法、易读性和可扩展性而闻名。支持多种编程 范式,包含了用于网络编程、数据库交互、文本处理、数学计算等多个方面的功能。
|
||||||
|
|
||||||
|
安装以下版本
|
||||||
|
```
|
||||||
|
Python 3.10.9
|
||||||
|
```
|
||||||
|
|
||||||
|
### 引入依赖包
|
||||||
|
|
||||||
|
包依赖如下
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install flask
|
||||||
|
pip install python-cas
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 运行程序
|
||||||
|
```bash
|
||||||
|
set FLASK_ENV=development
|
||||||
|
set FLASK_APP=python_cas_demo.py
|
||||||
|
flask run --host 0.0.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Python源代码
|
||||||
|
```python
|
||||||
|
from flask import Flask, request, session, redirect, url_for
|
||||||
|
from cas import CASClient
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
app.secret_key = 'V7nlCN90LPHOTA9PGGyf'
|
||||||
|
|
||||||
|
cas_client = CASClient(
|
||||||
|
version=3,
|
||||||
|
service_url='http://localhost:5000/cas/login?next=%2Fcas%2Fprofile',
|
||||||
|
server_url='http://sso.maxkey.top/sign/authz/cas/'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/cas/')
|
||||||
|
def index():
|
||||||
|
body = """<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Python CAS Demo</title>
|
||||||
|
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Welcome to python-cas Flask MaxKey Demo</h1>
|
||||||
|
<p><a href="/cas/login">点击MaxKey登录[CAS]</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
||||||
|
return body
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/cas/profile')
|
||||||
|
def profile(method=['GET']):
|
||||||
|
if 'username' in session:
|
||||||
|
return '欢迎 %s. <a href="/cas/logout">Logout</a>' % session['username']
|
||||||
|
return 'Login required. <a href="/cas/login">退出登录</a>', 403
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/cas/login')
|
||||||
|
def login():
|
||||||
|
if 'username' in session:
|
||||||
|
# Already logged in
|
||||||
|
return redirect(url_for('profile'))
|
||||||
|
|
||||||
|
next = request.args.get('next')
|
||||||
|
ticket = request.args.get('ticket')
|
||||||
|
print("ticket: ", ticket)
|
||||||
|
if not ticket:
|
||||||
|
# No ticket, the request come from end user, send to CAS login
|
||||||
|
cas_login_url = cas_client.get_login_url()
|
||||||
|
app.logger.info('CAS login URL: %s', cas_login_url)
|
||||||
|
print('CAS login URL: %s', cas_login_url)
|
||||||
|
return redirect(cas_login_url)
|
||||||
|
|
||||||
|
# There is a ticket, the request come from CAS as callback.
|
||||||
|
# need call `verify_ticket()` to validate ticket and get user profile.
|
||||||
|
app.logger.debug('ticket: %s', ticket)
|
||||||
|
app.logger.debug('next: %s', next)
|
||||||
|
print('ticket: %s', ticket)
|
||||||
|
print('next: %s', next)
|
||||||
|
|
||||||
|
user, attributes, pgtiou = cas_client.verify_ticket(ticket)
|
||||||
|
|
||||||
|
app.logger.debug(
|
||||||
|
'CAS verify ticket response: user: %s, attributes: %s, pgtiou: %s', user, attributes, pgtiou)
|
||||||
|
print(
|
||||||
|
'CAS verify ticket response: user: %s, attributes: %s, pgtiou: %s', user, attributes, pgtiou)
|
||||||
|
|
||||||
|
if not user:
|
||||||
|
return 'Failed to verify ticket. <a href="/cas/login">Login</a>'
|
||||||
|
else: # Login successfully, redirect according `next` query parameter.
|
||||||
|
session['username'] = user
|
||||||
|
return redirect(next)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/cas/logout')
|
||||||
|
def logout():
|
||||||
|
redirect_url = url_for('logout_callback', _external=True)
|
||||||
|
cas_logout_url = cas_client.get_logout_url(redirect_url)
|
||||||
|
app.logger.debug('CAS logout URL: %s', cas_logout_url)
|
||||||
|
print('CAS logout URL: %s', cas_logout_url)
|
||||||
|
|
||||||
|
return redirect(cas_logout_url)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/cas/logout_callback')
|
||||||
|
def logout_callback():
|
||||||
|
# redirect from CAS logout request after CAS logout successfully
|
||||||
|
session.pop('username', None)
|
||||||
|
return 'Logged out from CAS. <a href="/cas/login">Login</a>'
|
||||||
|
|
||||||
|
@app.route('/cas/ping')
|
||||||
|
def ping():
|
||||||
|
return 'pong'
|
||||||
|
```
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 7
|
||||||
|
---
|
||||||
|
# FormBased应用集成
|
||||||
|
本文介绍FormBased应用如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
## 应用注册
|
||||||
|
|
||||||
|
应用在MaxKey管理系统进行注册,注册的配置信息如下
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## 认证定制
|
||||||
|
|
||||||
|
可以基于相关的信息定制其他的认证方式。
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "JWT协议集成",
|
||||||
|
"position": 5,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
title: JWT协议集成
|
||||||
|
---
|
||||||
|
# JWT应用集成
|
||||||
|
本文介绍JWT应用如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
## 应用注册
|
||||||
|
|
||||||
|
应用在MaxKey管理系统进行注册,注册的配置信息如下
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
@ -0,0 +1,119 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
title: JWT Java客户端集成
|
||||||
|
---
|
||||||
|
|
||||||
|
## JWT Java客户端集成
|
||||||
|
|
||||||
|
本文使用JAVA WEB程序为例
|
||||||
|
|
||||||
|
### 引入客户端所需包
|
||||||
|
|
||||||
|
```java
|
||||||
|
gson-2.2.4.jar
|
||||||
|
maxkey-client-sdk.jar
|
||||||
|
nimbus-jose-jwt-8.10.jar
|
||||||
|
commons-codec-1.9.jar
|
||||||
|
commons-io-2.2.jar
|
||||||
|
commons-logging-1.1.1.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 获取令牌和用户信息及验证签名
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.model.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.utils.*" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jwt.JWTClaimsSet" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jose.*" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jwt.*" %>
|
||||||
|
<%@ page language="java" import="com.connsec.oidc.jose.keystore.*" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jose.jwk.*" %>
|
||||||
|
<%@ page language="java" import="java.io.File" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jose.crypto.*" %>
|
||||||
|
<%@ page language="java" import="com.google.gson.*" %>
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
|
||||||
|
String token=request.getParameter("jwt");
|
||||||
|
System.out.println("jwt "+token);
|
||||||
|
SignedJWT signedJWT=null;
|
||||||
|
File jwksFile=new File(PathUtils.getInstance().getClassPath()+"jwk.jwks");
|
||||||
|
JWKSet jwkSet=JWKSet.load(jwksFile);
|
||||||
|
RSASSAVerifier rsaSSAVerifier = new RSASSAVerifier(((RSAKey) jwkSet.getKeyByKeyId("maxkey_rsa")).toRSAPublicKey());
|
||||||
|
try {
|
||||||
|
signedJWT = SignedJWT.parse(token);
|
||||||
|
} catch (java.text.ParseException e) {
|
||||||
|
// Invalid signed JWT encoding
|
||||||
|
}
|
||||||
|
System.out.println("signedJWT "+signedJWT);
|
||||||
|
JWTClaimsSet jwtClaims =signedJWT.getJWTClaimsSet();
|
||||||
|
%>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
<title>JWT 1.0 Demo</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="JWT 1.0 Demo">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="<%=basePath %>/images/favicon.ico"/>
|
||||||
|
<script type="text/javascript" src="<%=basePath %>/jquery-3.5.0.min.js"></script>
|
||||||
|
<script type="text/javascript" src="<%=basePath %>/jsonformatter.js"></script>
|
||||||
|
<link type="text/css" rel="stylesheet" href="<%=basePath %>/demo.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<table class="datatable">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="title">JSON Web Token (JWT) 1.0 Demo</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>JWT 1.0 Logo</td>
|
||||||
|
<td> <img src="<%=basePath %>/images/jwt.png" width="124px" height="124px"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Issuer</td>
|
||||||
|
<td><%=jwtClaims.getIssuer() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Subject</td>
|
||||||
|
<td><%=jwtClaims.getSubject()%></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Audience</td>
|
||||||
|
<td><%=jwtClaims.getAudience() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ExpirationTime</td>
|
||||||
|
<td><%=jwtClaims.getExpirationTime() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>JWTID</td>
|
||||||
|
<td style="word-wrap: break-word;"><%=jwtClaims.getJWTID() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>IssueTime</td>
|
||||||
|
<td style="word-wrap: break-word;"><%=jwtClaims.getIssueTime() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Verify</td>
|
||||||
|
<td style="word-wrap: break-word;"><%=signedJWT.verify(rsaSSAVerifier) %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>JWTClaims</td>
|
||||||
|
<td style="word-wrap: break-word;">
|
||||||
|
<textarea cols="68" rows="20" v-model="text2"><%=signedJWT.getPayload() %></textarea>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
FormatTextarea();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
title: JWT PHP客户端集成
|
||||||
|
---
|
||||||
|
|
||||||
|
## JWT PHP客户端集成
|
||||||
|
|
||||||
|
### 引入依赖firebase/php-jwt
|
||||||
|
|
||||||
|
```php
|
||||||
|
composer require firebase/php-jwt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 验证签名
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
require 'vendor/autoload.php';
|
||||||
|
use \Firebase\JWT\JWT;
|
||||||
|
use \Firebase\JWT\Key;
|
||||||
|
|
||||||
|
$publicKey = <<<EOD
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyfZwQuBLNvJDhmziUCF
|
||||||
|
uAfIv+bC6ivodcR6PfanTt8XLd6G63Yx10YChAdsDACjoLz1tEU56WPp/ee/vcTS
|
||||||
|
sEZT3ouWJYghuGI2j4XclXlEj0S7DzdpcBBpI4n5dr8K3iKY+3JUMZR1AMBHI50U
|
||||||
|
aMST9ZTZJAjUPIYxkhRdca5lWBo4wGUh1yj/80+Bq6al0ia9S5NTzNLaJ18jSxFq
|
||||||
|
Z79BAkBm+KjkP248YUk6WBGtYEAV5Fws4dpse4hrqJ3RRHiMZV1o1iTmPHz/l55Z
|
||||||
|
SDP3vpYf6iKqKzoK2RmdjfH5mGpbc4+PclTs4GKfwZ7cWfrny6B7sMnQfzujCH99
|
||||||
|
6QIDAQAB
|
||||||
|
-----END PUBLIC KEY-----
|
||||||
|
EOD;
|
||||||
|
|
||||||
|
$jwt = $_POST["jwt"];
|
||||||
|
echo "jwt:\n" .$jwt. "\n";
|
||||||
|
|
||||||
|
$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: This will now be an object instead of an associative array.
|
||||||
|
* To get an associative array, you will need to cast it as such:
|
||||||
|
*/
|
||||||
|
$decoded_array = (array) $decoded;
|
||||||
|
echo "Decode:\n" . print_r($decoded_array, true) . "\n";
|
||||||
|
?>
|
||||||
|
```
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "OAuth2协议集成",
|
||||||
|
"position": 1,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,449 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
title: OAuth2协议标准
|
||||||
|
---
|
||||||
|
|
||||||
|
# OAuth2协议标准
|
||||||
|
本文介绍OAuth2应用如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
## 认证流程
|
||||||
|
采用Authorization Code获取Access Token的授权验证流程又被称为Web Server Flow,适用于所有Server端的应用。其调用流程示意图如下:
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
对于应用而言,其流程由获取Authorization Code和通过Authorization Code获取Access Token这2步组成。
|
||||||
|
|
||||||
|
1.引导需要授权的用户到如下地址:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://sso.maxkey.top/sign/authz/oauth/v20/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
|
||||||
|
```
|
||||||
|
|
||||||
|
2.页面跳转至
|
||||||
|
|
||||||
|
```
|
||||||
|
YOUR_REGISTERED_REDIRECT_URI/?code=CODE
|
||||||
|
```
|
||||||
|
|
||||||
|
3.换取Access Token
|
||||||
|
|
||||||
|
```
|
||||||
|
http://sso.maxkey.top/sign/authz/oauth/v20/token?client_id=YOUR_CLIENT_ID&client_secret=YOUR _SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE
|
||||||
|
```
|
||||||
|
|
||||||
|
返回值
|
||||||
|
|
||||||
|
```json
|
||||||
|
{ "access_token":"SlAV32hkKG", "remind_in ":3600, "expires_in":3600 }
|
||||||
|
```
|
||||||
|
|
||||||
|
## 应用注册
|
||||||
|
应用在MaxKey管理系统进行注册,注册的配置信息如下
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## API接口标准
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th> <strong>接口 </strong> </th>
|
||||||
|
<th> <strong>说明 </strong> </th>
|
||||||
|
<th> <strong>详细说明 </strong> </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> /authz/oauth/v20/authorize </td>
|
||||||
|
<td> 请求用户授权Token </td>
|
||||||
|
<td> http://sso.maxkey.top/sign接收app sso认证请求,<br/>client_id为需要认证的应用的id;</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> /authz/oauth/v20/token </td>
|
||||||
|
<td> 获取授权过的 Access Token </td>
|
||||||
|
<td> 后台应用获取 code ,调用接口进行 code 校验;<br/>校验成功获取访问 token </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> /api/oauth/v20/me </td>
|
||||||
|
<td> 授权用户信息查询接口 </td>
|
||||||
|
<td> 通过访问 token 获取登录用户信息 </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
### 授权接口
|
||||||
|
|
||||||
|
/authz/oauth/v20/authorize
|
||||||
|
|
||||||
|
请求用户授权Token
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th> 接口名称 </th>
|
||||||
|
<th> 请求用户授权Token </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> url </td>
|
||||||
|
<td> http://sso.maxkey.top/sign/authz/oauth/v20/authorize</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> 请求方式 </td>
|
||||||
|
<td> http get/post </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h5>请求参数</h5>
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th>参数 </th>
|
||||||
|
<th> 说明 </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> client_id </td>
|
||||||
|
<td> 注册应用时分配的client_id。 </td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td> redirect_uri </td>
|
||||||
|
<td>应用回调地址,注册时需要配置</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>grant_type</td>
|
||||||
|
<td>授权类型。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>etc param</td>
|
||||||
|
<td>其他参数。</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
响应返回app应用程序,包含请求参数如下:
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
http://app.maxkey.org/app/callback?code =PQ7q7W91a-oMsCeLvIaQm6bTrgtp7
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>code</td>
|
||||||
|
<td>用于调用/authz/oauth/token,接口获取授权后的访问token。</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### 令牌接口
|
||||||
|
/authz/oauth/v20/token
|
||||||
|
|
||||||
|
通过/authz/oauth/v20/token用code换取访问token
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th> 接口名称 </th>
|
||||||
|
<th> token 接口 </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> url </td>
|
||||||
|
<td> http://sso.maxkey.top/sign/authz/oauth/v20/token </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> 请求方式 </td>
|
||||||
|
<td> http get/post </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h5>请求参数</h5>
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th>参数 </th>
|
||||||
|
<th> 说明 </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> client_id </td>
|
||||||
|
<td> 注册应用时分配的client_id。 </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> client_secret </td>
|
||||||
|
<td> 注册应用时分配的client_secret</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> redirect_uri </td>
|
||||||
|
<td>应用回调地址,注册时需要配置</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>code</td>
|
||||||
|
<td>调用authz/oauth/v20/authorize获得的code值。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>grant_type</td>
|
||||||
|
<td>授权类型。Grant type</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>username</td>
|
||||||
|
<td>当grant_type=password时,此参数表示直接认证用户名。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>password</td>
|
||||||
|
<td>当grant_type=password时,此参数表示直接认证用户密码。</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>etc param</td>
|
||||||
|
<td>其他参数</td>
|
||||||
|
</tr>
|
||||||
|
<tr align="left">
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
实际请求如下:
|
||||||
|
|
||||||
|
```http
|
||||||
|
The actual request might look like:
|
||||||
|
POST /authz/oauth/v20/token token HTTP/1.1
|
||||||
|
Host: sso.maxkey.org/openapi
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
code= PQ7q7W91a-oMsCeLvIaQm6bTrgtp7&
|
||||||
|
client_id=QPKKKSADFUP876&
|
||||||
|
client_secret=client_secret&
|
||||||
|
redirect_uri=http://app.maxkey.org/app/callback
|
||||||
|
```
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
返回数据
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
A successful response to this request contains the following fields:
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>access_token</td>
|
||||||
|
<td>用该token能调用SSO的API</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
成功返回JSON数据,如下:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"access_token":"token_id",
|
||||||
|
"id_token":"id_token"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### 用户属性接口
|
||||||
|
/api/oauth/v20/me
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th> 接口名称 </th>
|
||||||
|
<th> token 接口 </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> url </td>
|
||||||
|
<td>http://sso.maxkey.top/sign/api/oauth/v20/me</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> 请求方式 </td>
|
||||||
|
<td> http get/post </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h5>请求参数</h5>
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th>参数 </th>
|
||||||
|
<th> 说明 </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> access_token </td>
|
||||||
|
<td> 调用sso/ token获得的token值。 </td>
|
||||||
|
</tr>
|
||||||
|
<tr align="left">
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
实际请求如下:
|
||||||
|
|
||||||
|
```http
|
||||||
|
POST /oauth/ userinfo HTTP/1.1
|
||||||
|
Host: sso.maxkey.org/openapi
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
access_token= PQ7q7W91a-oMsCeLvIaQm6bTrgtp7
|
||||||
|
```
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
返回数据/ response data
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<p>成功返回JSON数据,如下:</p>
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"userid":"zhangs"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
zhangs是认证的用户ID
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OAuth认证接口属性列表
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr >
|
||||||
|
<th> 属性名(Attribute) </th>
|
||||||
|
<th> 描述 </th>
|
||||||
|
<th>数据类型</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>uid</td>
|
||||||
|
<td>uid</td>
|
||||||
|
<td>字符串</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## OAuth2.0 错误码
|
||||||
|
|
||||||
|
MaxKey OAuth2.0实现中,授权服务器在接收到验证授权请求时,会按照OAuth2.0协议对本请求的请求头部.请求参数进行检验,若请求不合法或验证未通过,授权服务器会返回相应的错误信息,包含以下几个参数:
|
||||||
|
|
||||||
|
error: 错误码
|
||||||
|
|
||||||
|
error_description: 错误的描述信息
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
错误信息的返回方式有两种:
|
||||||
|
|
||||||
|
当请求授权Endpoint:http://sso.maxkey.top/sign/authz/oauth/v20/authorize 时出现错误,返回方式是:跳转到redirect_uri,并在uri 的query parameter中附带错误的描述信息。
|
||||||
|
|
||||||
|
当请求access token endpoint:http://sso.maxkey.top/sign/authz/oauth/v20/token 时出现错误,返回方式:返回JSON文本。
|
||||||
|
|
||||||
|
例如:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"error":"unsupported_response_type",
|
||||||
|
"error_description":"不支持的 ResponseType."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
OAuth2.0错误响应中的错误码定义如下表所示:
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<th>编号</th><th>错误码(error)</th><th>描述(error_description)</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>1</td>
|
||||||
|
<td>empty_client_id</td>
|
||||||
|
<td>参数client_id为空</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>2</td>
|
||||||
|
<td>empty_client_secret</td>
|
||||||
|
<td>参数client_secret为空</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>3</td>
|
||||||
|
<td>empty_redirect_uri</td>
|
||||||
|
<td>参数redirect_uri为空</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>4</td>
|
||||||
|
<td>empty_response_type</td>
|
||||||
|
<td>参数response_type为空</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>5</td>
|
||||||
|
<td>empty_code</td>
|
||||||
|
<td>code为空</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>6</td>
|
||||||
|
<td>app_unsupport_sso</td>
|
||||||
|
<td>应用不支持sso登录</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>7</td>
|
||||||
|
<td>app_unsupport_oauth</td>
|
||||||
|
<td>应用不支持OAuth认证</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>8</td>
|
||||||
|
<td>invalid_client_id</td>
|
||||||
|
<td>非法的client_id</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>9</td>
|
||||||
|
<td>invalid_response_type</td>
|
||||||
|
<td>非法的response_type</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>10</td>
|
||||||
|
<td>invalid_scope</td>
|
||||||
|
<td>非法的scope</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>11</td>
|
||||||
|
<td>invalid_grant_type</td>
|
||||||
|
<td>非法的grant_type</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>12</td>
|
||||||
|
<td>redirect_uri_mismatch</td>
|
||||||
|
<td>非法的redirect_uri</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>13</td>
|
||||||
|
<td>unsupported_response_type</td>
|
||||||
|
<td>不支持传递的response_type</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>14</td>
|
||||||
|
<td>invalid_code</td>
|
||||||
|
<td>非法的code</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>15</td>
|
||||||
|
<td>unsupported_refresh_token</td>
|
||||||
|
<td>不支持refresh_token的方式</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>16</td>
|
||||||
|
<td>access_token_exprise</td>
|
||||||
|
<td>access_token过期</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>17</td>
|
||||||
|
<td>invalid_access_token</td>
|
||||||
|
<td>非法的access_token</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>18</td>
|
||||||
|
<td>invalid_refresh_token</td>
|
||||||
|
<td>非法的refresh_token</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>19</td>
|
||||||
|
<td>refresh_token_exprise</td>
|
||||||
|
<td>refresh_token过期</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
@ -0,0 +1,201 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
title: OAuth2 Java客户端集成
|
||||||
|
---
|
||||||
|
|
||||||
|
## OAuth2 Java客户端集成
|
||||||
|
|
||||||
|
|
||||||
|
本文使用JAVA WEB程序为例
|
||||||
|
|
||||||
|
### 引入依赖包
|
||||||
|
|
||||||
|
```java
|
||||||
|
gson-2.2.4.jar
|
||||||
|
maxkey-client-sdk.jar
|
||||||
|
nimbus-jose-jwt-8.10.jar
|
||||||
|
commons-codec-1.9.jar
|
||||||
|
commons-io-2.2.jar
|
||||||
|
commons-logging-1.1.1.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
### 认证授权
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.oauth.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.api.MaxkeyApi20" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.model.Token" %>
|
||||||
|
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+path+"/";
|
||||||
|
|
||||||
|
String callback="http://oauth.demo.maxkey.top:8080/demo-oauth/oauth20callback.jsp";
|
||||||
|
OAuthService service = new ServiceBuilder()
|
||||||
|
.provider(MaxkeyApi20.class)
|
||||||
|
.apiKey("b32834accb544ea7a9a09dcae4a36403")
|
||||||
|
.apiSecret("E9UO53P3JH52aQAcnLP2FlLv8olKIB7u")
|
||||||
|
.callback(callback)
|
||||||
|
.build();
|
||||||
|
Token EMPTY_TOKEN = null;
|
||||||
|
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||||
|
|
||||||
|
request.getSession().setAttribute("oauthv20service", service);
|
||||||
|
|
||||||
|
%>
|
||||||
|
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
|
||||||
|
<title>OAuth 2.0 SSO</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="This is my page">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<a href="<%=authorizationUrl%>&approval_prompt=auto">oauth 2.0 sso</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 获取令牌及用户信息
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.oauth.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.api.MaxkeyApi20" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.model.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.domain.*" %>
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
|
||||||
|
|
||||||
|
OAuthService service = (OAuthService)request.getSession().getAttribute("oauthv20service");
|
||||||
|
if(service == null){
|
||||||
|
String callback="http://oauth.demo.maxkey.top:8080/demo-oauth/oauth20callback.jsp";
|
||||||
|
service = new ServiceBuilder()
|
||||||
|
.provider(MaxkeyApi20.class)
|
||||||
|
.apiKey("b32834accb544ea7a9a09dcae4a36403")
|
||||||
|
.apiSecret("E9UO53P3JH52aQAcnLP2FlLv8olKIB7u")
|
||||||
|
.callback(callback)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
Token EMPTY_TOKEN = null;
|
||||||
|
Verifier verifier = new Verifier(request.getParameter("code"));
|
||||||
|
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||||
|
|
||||||
|
OAuthClient restClient=new OAuthClient("http://sso.maxkey.top/sign/api/oauth/v20/me");
|
||||||
|
UserInfo userInfo=restClient.getUserInfo(accessToken.getAccess_token());
|
||||||
|
|
||||||
|
%>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
<title>OAuth V2.0 Demo</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="OAuth V2.0 Demo">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="<%=basePath %>/images/favicon.ico"/>
|
||||||
|
<script type="text/javascript" src="<%=basePath %>/jquery-3.5.0.min.js"></script>
|
||||||
|
<script type="text/javascript" src="<%=basePath %>/jsonformatter.js"></script>
|
||||||
|
<link type="text/css" rel="stylesheet" href="<%=basePath %>/demo.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<table class="datatable">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="title">OAuth V2.0 Demo</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="50%">OAuth V2.0 Logo</td>
|
||||||
|
<td width="50%"> <img src="<%=basePath %>/images/oauth-2-sm.png" width="124px" height="124px"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Login</td>
|
||||||
|
<td><%=userInfo.getUsername() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>DisplayName</td>
|
||||||
|
<td><%=userInfo.getDisplayName() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Department</td>
|
||||||
|
<td><%=userInfo.getDepartment() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>JobTitle</td>
|
||||||
|
<td><%=userInfo.getJobTitle() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>email</td>
|
||||||
|
<td><%=userInfo.getEmail() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ResponseString</td>
|
||||||
|
<td style="word-wrap: break-word;">
|
||||||
|
<textarea cols="68" rows="20" v-model="text2"><%=userInfo.getResponseString() %></textarea>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<script type="text/javascript">
|
||||||
|
FormatTextarea();
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
## OAuth2 PASSWORD模式
|
||||||
|
|
||||||
|
本文使用JAVA 程序为例
|
||||||
|
|
||||||
|
```java
|
||||||
|
package org.maxkey.client.oauth.test;
|
||||||
|
|
||||||
|
import org.maxkey.client.http.Response;
|
||||||
|
import org.maxkey.client.oauth.builder.api.MaxkeyPasswordApi20;
|
||||||
|
import org.maxkey.client.oauth.model.OAuthConfig;
|
||||||
|
import org.maxkey.client.oauth.model.Token;
|
||||||
|
import org.maxkey.client.oauth.oauth.OAuthPasswordService;
|
||||||
|
|
||||||
|
public class MaxkeyPasswordDemo {
|
||||||
|
/**
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String accessTokenUrl="http://sso.maxkey.top/sign/authz/oauth/v20/token";
|
||||||
|
String clientId = "b32834accb544ea7a9a09dcae4a36403";
|
||||||
|
String clientSerect = "E9UO53P3JH52aQAcnLP2FlLv8olKIB7u";
|
||||||
|
|
||||||
|
String callback = "http://oauth.demo.maxkey.top:8080/demo-oauth/oauth20callback.jsp";
|
||||||
|
String responseType ="token";
|
||||||
|
String approvalprompt = "auto";
|
||||||
|
|
||||||
|
OAuthConfig oauthServiceConfig=new OAuthConfig(clientId,clientSerect,callback);
|
||||||
|
MaxkeyPasswordApi20 passwordApi20=new MaxkeyPasswordApi20(accessTokenUrl);
|
||||||
|
OAuthPasswordService oAuthPasswordService=new OAuthPasswordService(oauthServiceConfig,passwordApi20);
|
||||||
|
Token accessToken = null;
|
||||||
|
Response response = null;
|
||||||
|
accessToken = oAuthPasswordService.getAccessToken("admin", "maxkey");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 详细见请参考
|
||||||
|
|
||||||
|
https://github.com/MaxKeyTop/MaxKey-Client-sdk/blob/master/src/test/java/org/maxkey/client/oauth/test/MaxkeyPasswordDemo.java
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "OIDC协议集成",
|
||||||
|
"position": 2,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
# OpenID Connect协议集成
|
||||||
|
本文介绍OpenID Connect协议如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
## 认证流程
|
||||||
|
|
||||||
|
请参照OAuth2认证流程
|
||||||
|
|
||||||
|
## 应用注册
|
||||||
|
应用在MaxKey管理系统进行注册,注册的配置信息如下
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## 集成和接口
|
||||||
|
用户属性接口/api/connect/v10/userinfo
|
||||||
|
|
||||||
|
通过访问token 获取登录用户信息及签名信息,在程序中必须验证相关的签名信息。
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th> 接口名称 </th>
|
||||||
|
<th> OIDC授权用户信息查询接口 </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> url </td>
|
||||||
|
<td>https://sso.maxkey.org/sign/api/connect/v10/userinfo</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> 请求方式 </td>
|
||||||
|
<td> http get/post </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h5>请求参数</h5>
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr>
|
||||||
|
<th>参数 </th>
|
||||||
|
<th> 说明 </th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td> access_token </td>
|
||||||
|
<td> 调用sso/ token获得的token值。 </td>
|
||||||
|
</tr>
|
||||||
|
<tr align="left">
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
实际请求如下:
|
||||||
|
|
||||||
|
```http
|
||||||
|
POST /oauth/userinfo HTTP/1.1
|
||||||
|
Host: sso.maxkey.org/openapi
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
access_token= PQ7q7W91a-oMsCeLvIaQm6bTrgtp7
|
||||||
|
```
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="left">
|
||||||
|
返回数据/ response data
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<p>成功返回JSON数据,如下:</p>
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
userid : "zhangs"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
zhangs是认证的用户ID
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OAuth认证接口属性列表
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<tr >
|
||||||
|
<th> 属性名(Attribute) </th>
|
||||||
|
<th> 描述 </th>
|
||||||
|
<th>数据类型</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>uid</td>
|
||||||
|
<td>uid</td>
|
||||||
|
<td>字符串</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
其他请参照OAuth2
|
||||||
@ -0,0 +1,213 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
title: OIDC Java客户端集成
|
||||||
|
---
|
||||||
|
|
||||||
|
## OIDC V1客户端集成
|
||||||
|
|
||||||
|
本文使用JAVA WEB程序为例
|
||||||
|
|
||||||
|
### 引入依赖包
|
||||||
|
|
||||||
|
```java
|
||||||
|
gson-2.2.4.jar
|
||||||
|
maxkey-client-sdk.jar
|
||||||
|
nimbus-jose-jwt-8.10.jar
|
||||||
|
commons-codec-1.9.jar
|
||||||
|
commons-io-2.2.jar
|
||||||
|
commons-logging-1.1.1.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
### 认证授权
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.oauth.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.api.MaxkeyApi20" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.model.Token" %>
|
||||||
|
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+path+"/";
|
||||||
|
|
||||||
|
String callback="http://oauth.demo.maxkey.top:8080/demo-oauth/oauth20callback.jsp";
|
||||||
|
OAuthService service = new ServiceBuilder()
|
||||||
|
.provider(MaxkeyApi20.class)
|
||||||
|
.apiKey("ae20330a-ef0b-4dad-9f10-d5e3485ca2ad")
|
||||||
|
.apiSecret("KQY4MDUwNjIwMjAxNTE3NTM1OTEYty")
|
||||||
|
.callback(callback)
|
||||||
|
.build();
|
||||||
|
Token EMPTY_TOKEN = null;
|
||||||
|
String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
|
||||||
|
|
||||||
|
request.getSession().setAttribute("oauthv20service", service);
|
||||||
|
|
||||||
|
%>
|
||||||
|
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
|
||||||
|
<title>OIDC V1 SSO</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="This is my page">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<a href="<%=authorizationUrl%>&approval_prompt=auto">OIDC V1 SSO</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 登录验证
|
||||||
|
|
||||||
|
获取令牌、用户信息及验证签名 (id_token及用户信息)
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.oauth.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.builder.api.MaxkeyApi20" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.model.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.oauth.domain.*" %>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.utils.*" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jwt.JWTClaimsSet" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jose.*" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jwt.*" %>
|
||||||
|
<%@ page language="java" import="com.connsec.oidc.jose.keystore.*" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jose.jwk.*" %>
|
||||||
|
<%@ page language="java" import="java.io.File" %>
|
||||||
|
<%@ page language="java" import="com.nimbusds.jose.crypto.*" %>
|
||||||
|
<%@ page language="java" import="com.google.gson.*" %>
|
||||||
|
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
|
||||||
|
|
||||||
|
OAuthService service = (OAuthService)request.getSession().getAttribute("oauthv20service");
|
||||||
|
|
||||||
|
if(service==null){
|
||||||
|
String callback="http://oauth.demo.maxkey.top:8080/demo-oauth/oidc10callback.jsp";
|
||||||
|
service = new ServiceBuilder()
|
||||||
|
.provider(MaxkeyApi20.class)
|
||||||
|
.apiKey("ae20330a-ef0b-4dad-9f10-d5e3485ca2ad")
|
||||||
|
.apiSecret("KQY4MDUwNjIwMjAxNTE3NTM1OTEYty")
|
||||||
|
.callback(callback)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
Token EMPTY_TOKEN = null;
|
||||||
|
Verifier verifier = new Verifier(request.getParameter("code"));
|
||||||
|
Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
|
||||||
|
|
||||||
|
//JWTClaimsSet idClaims = JWTClaimsSet.parse(accessToken.getId_token());
|
||||||
|
SignedJWT signedJWT=null;
|
||||||
|
|
||||||
|
//JWKSetKeyStore jwkSetKeyStore=new JWKSetKeyStore();
|
||||||
|
|
||||||
|
File jwksFile=new File(PathUtils.getInstance().getClassPath()+"jwk.jwks");
|
||||||
|
JWKSet jwkSet=JWKSet.load(jwksFile);
|
||||||
|
|
||||||
|
RSASSAVerifier rsaSSAVerifier = new RSASSAVerifier(((RSAKey) jwkSet.getKeyByKeyId("maxkey_rsa")).toRSAPublicKey());
|
||||||
|
try {
|
||||||
|
signedJWT = SignedJWT.parse(accessToken.getId_token());
|
||||||
|
} catch (java.text.ParseException e) {
|
||||||
|
// Invalid signed JWT encoding
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
OAuthClient restClient=new OAuthClient("http://sso.maxkey.top/sign/api/connect/v10/userinfo",accessToken.getToken());
|
||||||
|
|
||||||
|
OIDCUserInfo userInfo=restClient.getOIDCUserInfo(accessToken.getToken());
|
||||||
|
|
||||||
|
%>
|
||||||
|
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
|
||||||
|
<title>OpenID Connect 1.0 Demo</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="OpenID Connect 1.0 Demo">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="<%=basePath %>/images/favicon.ico"/>
|
||||||
|
<script type="text/javascript" src="<%=basePath %>/jquery-3.5.0.min.js"></script>
|
||||||
|
<script type="text/javascript" src="<%=basePath %>/jsonformatter.js"></script>
|
||||||
|
<link type="text/css" rel="stylesheet" href="<%=basePath %>/demo.css"/>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<table class="datatable">
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td colspan="2" class="title">OpenID Connect 1.0 Demo</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>OpenID Connect 1.0 Logo</td>
|
||||||
|
<td> <img src="<%=basePath %>/images/openid.png" width="124px" height="124px"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Login</td>
|
||||||
|
<td><%=userInfo.getSub() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>DisplayName</td>
|
||||||
|
<td><%=userInfo.getName()%></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Department</td>
|
||||||
|
<td><%=userInfo.getGender() %></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>email</td>
|
||||||
|
<td><%=userInfo.getEmail() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ResponseString</td>
|
||||||
|
<td style="word-wrap: break-word;">
|
||||||
|
<textarea cols="68" rows="20" v-model="text2"><%=userInfo.getResponseString() %></textarea>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Id_token</td>
|
||||||
|
<td style="word-wrap: break-word;"><%=accessToken.getId_token() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Verify</td>
|
||||||
|
<td style="word-wrap: break-word;"><%=signedJWT.verify(rsaSSAVerifier) %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Issuer</td>
|
||||||
|
<td style="word-wrap: break-word;"><%=signedJWT.getJWTClaimsSet().getIssuer() %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>JWTClaims</td>
|
||||||
|
<td style="word-wrap: break-word;">
|
||||||
|
<textarea cols="68" rows="20" v-model="text2"><%=signedJWT.getPayload() %></textarea>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
FormatTextarea();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "SAML协议集成",
|
||||||
|
"position": 4,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
title: SAML阿里云集成
|
||||||
|
---
|
||||||
|
# SAML阿里云集成
|
||||||
|
本文介绍阿里云使用SAML如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
<h2>应用注册</h2>
|
||||||
|
|
||||||
|
1)首先需要注册<a href="https://www.aliyun.com/" target="_blank" >阿里云</a>,并开通SAML认证功能,下载阿里云SAML元数据,具体说明文档请参照
|
||||||
|
|
||||||
|
访问控制 > 单点登录管理(SSO) > <a href="https://helpcdn.aliyun.com/document_detail/93684.html?spm=a2c4g.11186623.3.2.39a64d7bn76ODT" target="_blank" >SSO概览 </a>
|
||||||
|
|
||||||
|
|
||||||
|
2)应用在MaxKey管理系统进行注册,注册的配置信息如下,注册时需要提供阿里云SAML元数据
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
扩展属性配置,把阿里云的3个相关属性配置到MaxKey中
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
3)把MaxKey元数据上传到阿里云,参照阿里云文档
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 3
|
||||||
|
---
|
||||||
|
# SAMLSalesForce集成
|
||||||
|
TODO
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
---
|
||||||
|
# SAML腾讯云集成
|
||||||
|
本文介绍腾讯云使用SAML如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
<h2>应用注册</h2>
|
||||||
|
|
||||||
|
1)首先需要注册<a href="https://cloud.tencent.com/" target="_blank" >腾讯云</a>,并开通SAML认证功能,下载腾讯云SAML元数据,具体说明文档请参照
|
||||||
|
|
||||||
|
文档中心>访问管理>用户指南><a href="https://cloud.tencent.com/document/product/598/30283" target="_blank" >身份提供商 </a>
|
||||||
|
|
||||||
|
2)应用在MaxKey管理系统进行注册,注册的配置信息如下,注册时需要提供腾讯云SAML元数据
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
扩展属性配置,把腾讯云的3个相关属性配置到MaxKey中
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
3)把MaxKey元数据上传到腾讯云,参照腾讯云文档
|
||||||
@ -0,0 +1,241 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 6
|
||||||
|
---
|
||||||
|
|
||||||
|
# TokenBased协议集成
|
||||||
|
本文介绍TokenBased协议如何与MaxKey进行集成。
|
||||||
|
|
||||||
|
## 应用注册
|
||||||
|
|
||||||
|
应用在MaxKey管理系统进行注册,注册的配置信息如下
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
LTPA使用Cookie传输令牌
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## TokenBased客户端集成
|
||||||
|
|
||||||
|
本文使用JAVA WEB程序为例
|
||||||
|
|
||||||
|
### 引入客户端所需包
|
||||||
|
|
||||||
|
```ini
|
||||||
|
gson-2.2.4.jar
|
||||||
|
maxkey-client-sdk.jar
|
||||||
|
nimbus-jose-jwt-8.10.jar
|
||||||
|
commons-codec-1.9.jar
|
||||||
|
commons-io-2.2.jar
|
||||||
|
commons-logging-1.1.1.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
### 简单令牌
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.tokenbase.*"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.crypto.*"%>
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
|
||||||
|
|
||||||
|
String token =request.getParameter("token");
|
||||||
|
System.out.println("token : "+token);
|
||||||
|
String tokenString=TokenUtils.decode(token, "x8zPbCya", ReciprocalUtils.Algorithm.DES);
|
||||||
|
String parseToken[]=TokenUtils.parseSimpleBasedToken(tokenString);
|
||||||
|
%>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
|
||||||
|
<title>SimpleBasedToken Demo</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="SimpleBasedToken Demo">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="<%=basePath %>/images/favicon.ico"/>
|
||||||
|
<link type="text/css" rel="stylesheet" href="<%=basePath %>/demo.css"/>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<table class="datatable">
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td colspan="2" class="title">SimpleBasedToken Demo</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>SimpleBasedToken Logo</td>
|
||||||
|
<td> <img src="<%=basePath %>images/simple.png" width="124px" height="124px"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>UserName</td>
|
||||||
|
<td><%=parseToken[0]%></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Authentication at Time</td>
|
||||||
|
<td><%=parseToken[1]%></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 基于JSON令牌
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.tokenbase.*"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.crypto.*"%>
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
|
||||||
|
|
||||||
|
String token =request.getParameter("token");
|
||||||
|
System.out.println("token : "+token);
|
||||||
|
String tokenString=TokenUtils.decode(token, "lEWhDLTo", ReciprocalUtils.Algorithm.DES);
|
||||||
|
Map tokenMap=TokenUtils.parseJsonBasedToken(tokenString);
|
||||||
|
|
||||||
|
%>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
|
||||||
|
<title>JsonBasedToken Demo</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="JsonBasedToken Demo">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="<%=basePath %>/images/favicon.ico"/>
|
||||||
|
<link type="text/css" rel="stylesheet" href="<%=basePath %>/demo.css"/>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<table class="datatable">
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td colspan="2" class="title">JsonBasedToken Demo</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>JsonBasedToken Logo</td>
|
||||||
|
<td> <img src="<%=basePath %>images/json.png" width="124px" height="124px"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>UID</td>
|
||||||
|
<td><%=tokenMap.get("uid") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>UserName</td>
|
||||||
|
<td><%=tokenMap.get("username") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Department</td>
|
||||||
|
<td><%=tokenMap.get("department") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Email</td>
|
||||||
|
<td><%=tokenMap.get("email") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Authentication at Time</td>
|
||||||
|
<td><%=tokenMap.get("at")%></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Expires</td>
|
||||||
|
<td><%=tokenMap.get("expires")%></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 基于LTPA JSON(COOKIE JSON)令牌
|
||||||
|
|
||||||
|
```java
|
||||||
|
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.ltpa.*"%>
|
||||||
|
<%@ page language="java" import="org.maxkey.client.crypto.*"%>
|
||||||
|
<%
|
||||||
|
String path = request.getContextPath();
|
||||||
|
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
|
||||||
|
|
||||||
|
String ltpaVaule=LtpaUtils.readLtpa(request, "maxkey.top", "ltpa");
|
||||||
|
System.out.println("============ ltpaVaule "+ltpaVaule);
|
||||||
|
Map tokenMap=null;
|
||||||
|
if(ltpaVaule!=null){
|
||||||
|
String ltpaString=LtpaUtils.decode(ltpaVaule, "k1tk41Ng", ReciprocalUtils.Algorithm.DES);
|
||||||
|
tokenMap=LtpaUtils.parseLtpaJson(ltpaString);
|
||||||
|
}
|
||||||
|
%>
|
||||||
|
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="<%=basePath%>">
|
||||||
|
|
||||||
|
<title>LTPA Demo</title>
|
||||||
|
<meta http-equiv="pragma" content="no-cache">
|
||||||
|
<meta http-equiv="cache-control" content="no-cache">
|
||||||
|
<meta http-equiv="expires" content="0">
|
||||||
|
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
|
||||||
|
<meta http-equiv="description" content="LTPA Demo">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="<%=basePath %>/images/favicon.ico"/>
|
||||||
|
<link type="text/css" rel="stylesheet" href="<%=basePath %>/demo.css"/>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<table class="datatable">
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td colspan="2" class="title">LTPA Demo</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>LTPA Logo</td>
|
||||||
|
<td> <img src="<%=basePath %>images/ltpa.png" width="124px" height="124px"/></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>UID</td>
|
||||||
|
<td><%=tokenMap.get("uid") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>UserName</td>
|
||||||
|
<td><%=tokenMap.get("username") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Department</td>
|
||||||
|
<td><%=tokenMap.get("department") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Email</td>
|
||||||
|
<td><%=tokenMap.get("email") %></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Authentication at Time</td>
|
||||||
|
<td><%=tokenMap.get("at")%></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Expires</td>
|
||||||
|
<td><%=tokenMap.get("expires")%></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
title: 单点登录UI
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
# 单点登录UI
|
||||||
|
|
||||||
|
## 登录视图
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## 应用视图
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "API接口",
|
||||||
|
"position": 10,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: 认证总地址接口
|
||||||
|
sidebar_position: 11
|
||||||
|
---
|
||||||
|
|
||||||
|
## 认证总地址接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/{id}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>参数应用ID,分发到不同应用的认证地址</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|id|id|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
title: CAS 1.0 ticket验证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS 1.0 ticket验证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/validate`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/json`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过ticket获取当前登录用户信息</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|service|service|query|true|string||
|
||||||
|
|ticket|ticket|query|true|string||
|
||||||
|
|renew|renew|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
title: CAS 2.0 ticket代理验证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS 2.0 ticket代理验证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/proxyValidate`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/json`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`application/xml`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过ticket获取当前登录用户信息</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|service|service|query|true|string||
|
||||||
|
|ticket|ticket|query|true|string||
|
||||||
|
|format|format|query|false|string||
|
||||||
|
|pgtUrl|pgtUrl|query|false|string||
|
||||||
|
|renew|renew|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
title: CAS 2.0 ticket验证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS 2.0 ticket验证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/serviceValidate`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/json`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`application/xml`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过ticket获取当前登录用户信息</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|service|service|query|true|string||
|
||||||
|
|ticket|ticket|query|true|string||
|
||||||
|
|format|format|query|false|string||
|
||||||
|
|pgtUrl|pgtUrl|query|false|string||
|
||||||
|
|renew|renew|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
title: CAS 3.0 ProxyTicket代理验证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS 3.0 ProxyTicket代理验证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/p3/proxy`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/json`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过ProxyGrantingTicket获取ProxyTicket</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|pgt|pgt|query|true|string||
|
||||||
|
|targetService|targetService|query|true|string||
|
||||||
|
|format|format|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
title: CAS 3.0 ticket代理验证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS 3.0 ticket代理验证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/p3/proxyValidate`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/json`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过ProxyTicket获取当前登录用户信息</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|service|service|query|true|string||
|
||||||
|
|ticket|ticket|query|true|string||
|
||||||
|
|format|format|query|false|string||
|
||||||
|
|pgtUrl|pgtUrl|query|false|string||
|
||||||
|
|renew|renew|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
title: CAS 3.0 ticket验证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS 3.0 ticket验证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/p3/serviceValidate`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/json`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过ticket获取当前登录用户信息</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|service|service|query|true|string||
|
||||||
|
|ticket|ticket|query|true|string||
|
||||||
|
|format|format|query|false|string||
|
||||||
|
|pgtUrl|pgtUrl|query|false|string||
|
||||||
|
|renew|renew|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "CAS接口",
|
||||||
|
"position": 2,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
---
|
||||||
|
title: CAS页面跳转应用ID认证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS页面跳转应用ID认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/{id}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|id|id|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "REST认证接口",
|
||||||
|
"position": 4,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
title: ServiceTicket接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS REST认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/v1/tickets/{ticketGrantingTicket}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过TGT获取ST</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|ticketGrantingTicket|ticketGrantingTicket|path|true|string||
|
||||||
|
|password||formData|false|string||
|
||||||
|
|service||formData|false|string||
|
||||||
|
|renew||formData|false|string||
|
||||||
|
|username||formData|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|201|Created||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
---
|
||||||
|
title: ticketGrantingTicket接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS REST认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/v1/tickets/{ticketGrantingTicket}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>检查TGT状态</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|ticketGrantingTicket|ticketGrantingTicket|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
---
|
||||||
|
title: 注销TGT状态接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS REST认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/v1/tickets/{ticketGrantingTicket}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`DELETE`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>注销TGT状态</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|ticketGrantingTicket|ticketGrantingTicket|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
title: CAS REST认证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS REST认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/v1/tickets`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>通过用户名密码获取TGT</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|password||formData|false|string||
|
||||||
|
|service||formData|false|string||
|
||||||
|
|username||formData|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|201|Created||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
title: 用户名密码登录接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS REST认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/v1/users`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>用户名密码登录接口</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|password||formData|false|string||
|
||||||
|
|service||formData|false|string||
|
||||||
|
|username||formData|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|201|Created||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
---
|
||||||
|
title: CAS页面跳转service认证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS页面跳转service认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/login`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数service</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|service|service|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
---
|
||||||
|
title: CAS注销接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## CAS注销接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/cas/logout`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>CAS注销接口</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|service|service|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: ExtendApi接口
|
||||||
|
sidebar_position: 6
|
||||||
|
---
|
||||||
|
|
||||||
|
## ExtendApi认证地址接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/api/{id}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>参数应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|id|id|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: FormBased接口
|
||||||
|
sidebar_position: 7
|
||||||
|
---
|
||||||
|
|
||||||
|
## FormBased认证地址接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/formbased/{id}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>参数应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|id|id|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: JWT接口
|
||||||
|
sidebar_position: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
## JWT应用ID认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/jwt/{id}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|id|id|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
---
|
||||||
|
title: 登录接口
|
||||||
|
sidebar_position: 8
|
||||||
|
---
|
||||||
|
|
||||||
|
## 登录接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/login`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>用户登录地址</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: 单点注销接口
|
||||||
|
sidebar_position: 9
|
||||||
|
---
|
||||||
|
|
||||||
|
## 单点注销接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/force/logout`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>redirect_uri跳转地址</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|redirect_uri|redirect_uri|query|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "OAuth2接口",
|
||||||
|
"position": 1,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,77 @@
|
|||||||
|
---
|
||||||
|
title: 认证接口
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
## OAuth 2.0 认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/oauth/v20/authorize`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数client_id,response_type,redirect_uri等</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|parameters|parameters|query|true||object|
|
||||||
|
|complete||query|false|boolean||
|
||||||
|
|model|model|query|false|object||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: 认证ID接口
|
||||||
|
sidebar_position: 2
|
||||||
|
---
|
||||||
|
|
||||||
|
## OAuth 2.0 认证ID接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/oauth/v20/{id}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数应用ID,自动完成跳转认证拼接</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|id|id|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
title: Token检查接口
|
||||||
|
sidebar_position: 6
|
||||||
|
---
|
||||||
|
|
||||||
|
## OAuth 2.0 token检查接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/oauth/v20/check_token`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/json`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数token</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|token|token|query|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
object
|
||||||
|
```
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
title: 用户信息接口
|
||||||
|
sidebar_position: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
## OAuth 2.0 用户信息接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/api/oauth/v20/me`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数access_token</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|access_token|access_token|query|false|string||
|
||||||
|
|authorization|authorization|header|false|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
|
||||||
|
```
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
title: OIDC 用户信息接口
|
||||||
|
sidebar_position: 5
|
||||||
|
---
|
||||||
|
|
||||||
|
## OIDC 用户信息接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/api/connect/v10/userinfo`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递Authorization参数access_token</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|Authorization|Authorization|header|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,162 @@
|
|||||||
|
---
|
||||||
|
title: 获取AccessToken接口
|
||||||
|
sidebar_position: 3
|
||||||
|
---
|
||||||
|
|
||||||
|
## OAuth 2.0 获取AccessToken接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/oauth/v20/token`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET` `POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数token等</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|parameters|parameters|query|true||object|
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|OAuth2AccessToken|
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|additionalInformation||object||
|
||||||
|
|expiration||string(date-time)|string(date-time)|
|
||||||
|
|expired||boolean||
|
||||||
|
|expiresIn||integer(int32)|integer(int32)|
|
||||||
|
|oauth2Exception||OAuth2Exception|OAuth2Exception|
|
||||||
|
|  additionalInformation||object||
|
||||||
|
|  cause||Throwable|Throwable|
|
||||||
|
|    cause||Throwable|Throwable|
|
||||||
|
|    localizedMessage||string||
|
||||||
|
|    message||string||
|
||||||
|
|    stackTrace||array|StackTraceElement|
|
||||||
|
|      className||string||
|
||||||
|
|      fileName||string||
|
||||||
|
|      lineNumber||integer||
|
||||||
|
|      methodName||string||
|
||||||
|
|      nativeMethod||boolean||
|
||||||
|
|    suppressed||array|Throwable|
|
||||||
|
|  httpErrorCode||integer(int32)||
|
||||||
|
|  localizedMessage||string||
|
||||||
|
|  message||string||
|
||||||
|
|  oauth2ErrorCode||string||
|
||||||
|
|  stackTrace||array|StackTraceElement|
|
||||||
|
|    className||string||
|
||||||
|
|    fileName||string||
|
||||||
|
|    lineNumber||integer||
|
||||||
|
|    methodName||string||
|
||||||
|
|    nativeMethod||boolean||
|
||||||
|
|  summary||string||
|
||||||
|
|  suppressed||array|Throwable|
|
||||||
|
|    cause||Throwable|Throwable|
|
||||||
|
|    localizedMessage||string||
|
||||||
|
|    message||string||
|
||||||
|
|    stackTrace||array|StackTraceElement|
|
||||||
|
|      className||string||
|
||||||
|
|      fileName||string||
|
||||||
|
|      lineNumber||integer||
|
||||||
|
|      methodName||string||
|
||||||
|
|      nativeMethod||boolean||
|
||||||
|
|    suppressed||array|Throwable|
|
||||||
|
|refreshToken||OAuth2RefreshToken|OAuth2RefreshToken|
|
||||||
|
|scope||array||
|
||||||
|
|tokenType||string||
|
||||||
|
|value||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"additionalInformation": {},
|
||||||
|
"expiration": "",
|
||||||
|
"expired": true,
|
||||||
|
"expiresIn": 0,
|
||||||
|
"oauth2Exception": {
|
||||||
|
"additionalInformation": {},
|
||||||
|
"cause": {
|
||||||
|
"cause": {
|
||||||
|
"cause": {},
|
||||||
|
"localizedMessage": "",
|
||||||
|
"message": "",
|
||||||
|
"stackTrace": [
|
||||||
|
{
|
||||||
|
"className": "",
|
||||||
|
"fileName": "",
|
||||||
|
"lineNumber": 0,
|
||||||
|
"methodName": "",
|
||||||
|
"nativeMethod": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"suppressed": [
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"localizedMessage": "",
|
||||||
|
"message": "",
|
||||||
|
"stackTrace": [
|
||||||
|
{
|
||||||
|
"className": "",
|
||||||
|
"fileName": "",
|
||||||
|
"lineNumber": 0,
|
||||||
|
"methodName": "",
|
||||||
|
"nativeMethod": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"suppressed": [
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"httpErrorCode": 0,
|
||||||
|
"localizedMessage": "",
|
||||||
|
"message": "",
|
||||||
|
"oauth2ErrorCode": "",
|
||||||
|
"stackTrace": [
|
||||||
|
{
|
||||||
|
"className": "",
|
||||||
|
"fileName": "",
|
||||||
|
"lineNumber": 0,
|
||||||
|
"methodName": "",
|
||||||
|
"nativeMethod": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"summary": "",
|
||||||
|
"suppressed": [
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"refreshToken": {},
|
||||||
|
"scope": [],
|
||||||
|
"tokenType": "",
|
||||||
|
"value": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "SAML接口",
|
||||||
|
"position": 3,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: SAML 2.0 IDP Init接口
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
## SAML 2.0 IDP Init接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/saml20/idpinit/{appid}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|appid|appid|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
title: SAML单点注销地址接口
|
||||||
|
sidebar_position: 3
|
||||||
|
---
|
||||||
|
|
||||||
|
## SAML单点注销地址接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/logout/saml`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
title: SAML 2.0 元数据接口
|
||||||
|
sidebar_position: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
## SAML 2.0 元数据接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/metadata/saml20/mxk_metadata_{appid}.xml`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`application/xml`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>参数Idp_Metadata_应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|appid|appid|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: SAML 2.0 SP Init接收接口
|
||||||
|
sidebar_position: 2
|
||||||
|
---
|
||||||
|
|
||||||
|
## SAML 2.0 SP Init接收接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/saml20/{appid}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET` `POST`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|appid|appid|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|404|Not Found||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
title: 在线ticket验证接口
|
||||||
|
---
|
||||||
|
|
||||||
|
## 在线ticket验证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/onlineticket/validate`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|ticket|ticket|query|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK||
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```text
|
||||||
|
string
|
||||||
|
```
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
title: 登录超时接口
|
||||||
|
sidebar_position: 10
|
||||||
|
---
|
||||||
|
|
||||||
|
## 登录超时接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/timeout`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
暂无
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: TokenBased接口
|
||||||
|
sidebar_position: 5
|
||||||
|
---
|
||||||
|
|
||||||
|
## TokenBased认证接口
|
||||||
|
|
||||||
|
|
||||||
|
**接口地址**:`/sign/authz/tokenbased/{id}`
|
||||||
|
|
||||||
|
|
||||||
|
**请求方式**:`GET`
|
||||||
|
|
||||||
|
|
||||||
|
**请求数据类型**:`application/x-www-form-urlencoded`
|
||||||
|
|
||||||
|
|
||||||
|
**响应数据类型**:`*/*`
|
||||||
|
|
||||||
|
|
||||||
|
**接口描述**:<p>传递参数应用ID</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
**请求参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 请求类型 | 是否必须 | 数据类型 | schema |
|
||||||
|
| -------- | -------- | ----- | -------- | -------- | ------ |
|
||||||
|
|id|id|path|true|string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应状态**:
|
||||||
|
|
||||||
|
|
||||||
|
| 状态码 | 说明 | schema |
|
||||||
|
| -------- | -------- | ----- |
|
||||||
|
|200|OK|ModelAndView|
|
||||||
|
|204|No Content||
|
||||||
|
|401|Unauthorized||
|
||||||
|
|403|Forbidden||
|
||||||
|
|
||||||
|
|
||||||
|
**响应参数**:
|
||||||
|
|
||||||
|
|
||||||
|
| 参数名称 | 参数说明 | 类型 | schema |
|
||||||
|
| -------- | -------- | ----- |----- |
|
||||||
|
|empty||boolean||
|
||||||
|
|model||object||
|
||||||
|
|modelMap||object||
|
||||||
|
|reference||boolean||
|
||||||
|
|status|可用值:ACCEPTED,ALREADY_REPORTED,BAD_GATEWAY,BAD_REQUEST,BANDWIDTH_LIMIT_EXCEEDED,CHECKPOINT,CONFLICT,CONTINUE,CREATED,DESTINATION_LOCKED,EXPECTATION_FAILED,FAILED_DEPENDENCY,FORBIDDEN,FOUND,GATEWAY_TIMEOUT,GONE,HTTP_VERSION_NOT_SUPPORTED,IM_USED,INSUFFICIENT_SPACE_ON_RESOURCE,INSUFFICIENT_STORAGE,INTERNAL_SERVER_ERROR,I_AM_A_TEAPOT,LENGTH_REQUIRED,LOCKED,LOOP_DETECTED,METHOD_FAILURE,METHOD_NOT_ALLOWED,MOVED_PERMANENTLY,MOVED_TEMPORARILY,MULTIPLE_CHOICES,MULTI_STATUS,NETWORK_AUTHENTICATION_REQUIRED,NON_AUTHORITATIVE_INFORMATION,NOT_ACCEPTABLE,NOT_EXTENDED,NOT_FOUND,NOT_IMPLEMENTED,NOT_MODIFIED,NO_CONTENT,OK,PARTIAL_CONTENT,PAYLOAD_TOO_LARGE,PAYMENT_REQUIRED,PERMANENT_REDIRECT,PRECONDITION_FAILED,PRECONDITION_REQUIRED,PROCESSING,PROXY_AUTHENTICATION_REQUIRED,REQUESTED_RANGE_NOT_SATISFIABLE,REQUEST_ENTITY_TOO_LARGE,REQUEST_HEADER_FIELDS_TOO_LARGE,REQUEST_TIMEOUT,REQUEST_URI_TOO_LONG,RESET_CONTENT,SEE_OTHER,SERVICE_UNAVAILABLE,SWITCHING_PROTOCOLS,TEMPORARY_REDIRECT,TOO_EARLY,TOO_MANY_REQUESTS,UNAUTHORIZED,UNAVAILABLE_FOR_LEGAL_REASONS,UNPROCESSABLE_ENTITY,UNSUPPORTED_MEDIA_TYPE,UPGRADE_REQUIRED,URI_TOO_LONG,USE_PROXY,VARIANT_ALSO_NEGOTIATES|string||
|
||||||
|
|view||View|View|
|
||||||
|
|  contentType||string||
|
||||||
|
|viewName||string||
|
||||||
|
|
||||||
|
|
||||||
|
**响应示例**:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
"empty": true,
|
||||||
|
"model": {},
|
||||||
|
"modelMap": {},
|
||||||
|
"reference": true,
|
||||||
|
"status": "",
|
||||||
|
"view": {
|
||||||
|
"contentType": ""
|
||||||
|
},
|
||||||
|
"viewName": ""
|
||||||
|
}
|
||||||
|
```
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "学院",
|
||||||
|
"position": 11,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important Docusaurus concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
layout: zh/default
|
||||||
|
---
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"label": "单点登录协议",
|
||||||
|
"position": 1,
|
||||||
|
"link": {
|
||||||
|
"type": "generated-index",
|
||||||
|
"description": "5 minutes to learn the most important Docusaurus concepts."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
title: CAS协议
|
||||||
|
sidebar_position: 3
|
||||||
|
---
|
||||||
|
## CAS简介
|
||||||
|
|
||||||
|
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
|
||||||
|
|
||||||
|
CAS的目标是允许用户访问多个应用程序只提供一次用户凭据(如用户名和密码)。它还允许Web应用程序对用户进行身份验证,而不必获取用户的安全凭证,比如密码。
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>一个开放的,文档齐全的协议。</li>
|
||||||
|
<li>开源的JAVA服务器组件。</li>
|
||||||
|
<li>CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。</li>
|
||||||
|
<li>与uPortal, BlueSocket, TikiWiki, Mule, Liferay, Moodle等等能很好集成。</li>
|
||||||
|
<li>文档社区化和实现的支持。</li>
|
||||||
|
<li>具有广泛的客户群的支持。</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
扩展阅读参看:官方技术说明<a href="https://www.apereo.org/cas" title="https://www.apereo.org/cas" target="_blank" rel="nofollow">CAS官方网站(en) </a> | <a href="http://en.wikipedia.org/wiki/Central_Authentication_Service" title="http://en.wikipedia.org/wiki/Central_Authentication_Service" target="_blank" rel="nofollow">CAS维基百科(en)</a>
|
||||||
|
|
||||||
|
## CAS体系结构
|
||||||
|
CAS 体系包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## CAS原理
|
||||||
|
CAS 最基本的协议过程:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
SSO单点登录访问流程主要有以下步骤:
|
||||||
|
|
||||||
|
1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
|
||||||
|
|
||||||
|
2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
|
||||||
|
|
||||||
|
3. 用户认证:用户身份认证。
|
||||||
|
|
||||||
|
4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
|
||||||
|
|
||||||
|
5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
|
||||||
|
|
||||||
|
6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。
|
||||||
|
|
||||||
|
CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。
|
||||||
|
|
||||||
|
在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。
|
||||||
|
|
||||||
|
另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS 官方网站上的相关文档。
|
||||||
|
|
||||||
|
## CAS中3个术语
|
||||||
|
|
||||||
|
Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在Server端
|
||||||
|
|
||||||
|
Ticket-granting cookie (TGC) :其实就是一个Cookie,存放用户身份信息,由Server发给Client端
|
||||||
|
|
||||||
|
Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于Server发给Client一张票,然后Client拿着这个票再来找Server验证,看看是不是Server签发的。
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
title: FormBased代填
|
||||||
|
sidebar_position: 7
|
||||||
|
---
|
||||||
|
|
||||||
|
## FormBased介绍
|
||||||
|
|
||||||
|
HTTP+HTML FormBased(基于表单)的认证,目前一般简单的基于表单的认证,是一种登录技术,即一个网站使用一个Web表单收集,并随后进行身份验证;认证的凭证信息来源于用户代理,通常web浏览器。 (请注意,短语“基于表单的认证”是不明确的。请参阅进一步解释基于表单的认证。)
|
||||||
|
|
||||||
|
## 交互概要
|
||||||
|
|
||||||
|
该技术的实现步骤是:
|
||||||
|
<ol>
|
||||||
|
<li>一个未经身份验证的用户代理通过HTTP协议从网站请求一个网页。</li>
|
||||||
|
<li>该网站返回一个HTML网页的未经验证的用户代理。该网页包含提示用户为他们的用户名和密码,以及标有“登录”或“提交”按钮基于HTML的Web表单最低限度。</li>
|
||||||
|
<li>用户填写自己的用户名和密码,然后按下提交按钮。</li>
|
||||||
|
<li>所述用户代理发送的web表单数据(包括用户名和密码)到Web服务器。</li>
|
||||||
|
<li>网站实现中,Web服务器上运行时,执行对网络的形式的数据部分的验证和确认操作。如果成功,该网站考虑用户代理进行认证。</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
## 采纳建议
|
||||||
|
|
||||||
|
HTTP + HTML基于表单的认证,可以说是万维网上采用当今最流行的用户认证技术。几乎所有维基,论坛,银行/财经网站,电子商务网站,网络搜索引擎,门户网站,和其他常见的Web服务器应用程序都选择了这种认证技术。
|
||||||
|
|
||||||
|
|
||||||
|
这种普及显然是由于网站管理员或他们的雇主想要细粒度地控制征求用户凭据的表现和行为,而默认弹出对话框(用于HTTP基本访问身份验证或摘要接入认证),许多Web浏览器提供不允许精确的剪裁。所需的精确度可以通过公司的要求(如品牌)或实施问题的动机(如网站之类的软件对于MediaWiki,phpBB的,Drupal的,WordPress的默认配置)。无论理由,任何企业品牌或用户体验的调整不能从这个认证过程的几个安全考虑分散。
|
||||||
|
|
||||||
|
## 安全方面注意事项
|
||||||
|
<ol>
|
||||||
|
<li>用户凭据传递了密文到web网站,除非采取诸如就业传输层安全(TLS)的监听。</li>
|
||||||
|
<li>该技术基本上是特设在于有效地没有任何用户代理和所述网络服务器之间的交互,除HTTP之外的与HTML本身是标准化。通过该网站所使用的实际的认证机制是,默认,未知的用户和用户代理。形式本身,包括可编辑字段的数量,和期望的内容物,完全实现和部署相关的。</li>
|
||||||
|
<li>这种技术本身临时的,否则犯罪分子极易伪装成可信任方在认证过程中。</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
## 代码实现
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<form method="post" action="/login">
|
||||||
|
<input type="text" name="username" required>
|
||||||
|
<input type="password" name="password" required>
|
||||||
|
<input type="submit" value="Login">
|
||||||
|
</form>
|
||||||
|
```
|
||||||
@ -0,0 +1,139 @@
|
|||||||
|
---
|
||||||
|
title: JWT协议
|
||||||
|
sidebar_position: 4
|
||||||
|
---
|
||||||
|
## JSON Web Token介绍
|
||||||
|
|
||||||
|
JSON Web Token (JWT)是一个开放标准(<a href="https://tools.ietf.org/html/rfc7519" target="_blank">RFC 7519</a>),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用<b>HMAC</b>算法)或使用<b>RSA</b>或<b>ECDSA</b>的公用/专用密钥对对JWT进行签名。
|
||||||
|
|
||||||
|
尽管可以对JWT进行加密以在各方之间提供保密性,但我们将重点关注已签名的令牌。签名的令牌可以验证其中包含的声明的完整性,而加密的令牌则将这些声明隐藏在其他方的面前。当使用公钥/私钥对对令牌进行签名时,签名还证明只有持有私钥的一方才是对其进行签名的一方。
|
||||||
|
|
||||||
|
扩展阅读参看:官方技术说明 <a href="https://tools.ietf.org/html/rfc7519" target="_blank">JWT</a>
|
||||||
|
|
||||||
|
## 什么时候使用JSON Web Token
|
||||||
|
|
||||||
|
以下是JSON Web令牌有用的一些情况:
|
||||||
|
|
||||||
|
<b>授权:</b>这是使用JWT的最常见方案。一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。单一登录是当今广泛使用JWT的一项功能,因为它的开销很小并且可以在不同的域中轻松使用。
|
||||||
|
|
||||||
|
<b>信息交换:</b>JSON Web令牌是在各方之间安全地传输信息的好方法。因为可以对JWT进行签名(例如,使用公钥/私钥对),所以您可以确定发件人是他们所说的人。此外,由于签名是使用标头和有效负载计算的,因此您还可以验证内容是否遭到篡改。
|
||||||
|
|
||||||
|
## JSON Web Token结构
|
||||||
|
|
||||||
|
JSON Web Token以紧凑的形式由三部分组成,这些部分由点(.)分隔,分别是:
|
||||||
|
|
||||||
|
Header(标头)
|
||||||
|
|
||||||
|
Payload(有效载荷)
|
||||||
|
|
||||||
|
Signature(签名)
|
||||||
|
|
||||||
|
因此,JWT通常如下所示。
|
||||||
|
|
||||||
|
```json xxxxx.yyyyy.zzzzz```
|
||||||
|
|
||||||
|
让我们分解不同的部分。
|
||||||
|
|
||||||
|
### Header(标头)
|
||||||
|
|
||||||
|
标头通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法,例如HMAC SHA256或RSA。
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"alg": "HS256",
|
||||||
|
"typ": "JWT"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
然后,此JSON被<b>Base64Url</b>编码以形成JWT的第一部分。
|
||||||
|
|
||||||
|
### Payload(有效载荷)
|
||||||
|
|
||||||
|
令牌的第二部分是有效负载,其中包含声明。声明是有关实体(通常是用户)和其他数据的声明。索赔有以下三种类型:注册的,公共的和私人索赔。
|
||||||
|
|
||||||
|
已注册的权利要求:这些是一组非强制性的但建议使用的预定义权利要求,以提供一组有用的,可互操作的权利要求。其中一些是: <b>iss</b>(发布者), <b>exp</b>(到期时间), <b>sub</b>(主题), <b>aud</b>(受众群体)等。
|
||||||
|
|
||||||
|
请注意,声明名称仅是三个字符,因为JWT是紧凑的。
|
||||||
|
|
||||||
|
公开声明:使用JWT的人员可以随意定义这些声明。但是为避免冲突,应在 <a href="https://www.iana.org/assignments/jwt/jwt.xhtml" target="_blank">IANA JSON Web令牌注册表</a>中定义它们,或将其定义为包含抗冲突名称空间的URI。
|
||||||
|
|
||||||
|
私人权利:这些都是使用它们同意并既不是当事人之间建立共享信息的自定义声明注册或公众的权利要求。
|
||||||
|
|
||||||
|
有效负载示例可能是:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"sub": "1234567890",
|
||||||
|
"name": "John Doe",
|
||||||
|
"admin": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
然后,对有效负载进行<b>Base64Url</b>编码,以形成JSON Web令牌的第二部分。
|
||||||
|
|
||||||
|
请注意,对于已签名的令牌,此信息尽管可以防止篡改,但任何人都可以读取。除非将其加密,否则请勿将机密信息放入JWT的有效负载或报头元素中。
|
||||||
|
|
||||||
|
### Signature(签名)
|
||||||
|
|
||||||
|
要创建签名部分,您必须获取编码的标头,编码的有效载荷,机密,标头中指定的算法,并对其进行签名。
|
||||||
|
|
||||||
|
例如,如果要使用HMAC SHA256算法,则将通过以下方式创建签名:
|
||||||
|
```json
|
||||||
|
HMACSHA256(
|
||||||
|
base64UrlEncode(header) + "." +
|
||||||
|
base64UrlEncode(payload),
|
||||||
|
secret)
|
||||||
|
```
|
||||||
|
签名用于验证消息在此过程中没有更改,并且对于使用私钥进行签名的令牌,它还可以验证JWT的发送者是它所说的真实身份。
|
||||||
|
|
||||||
|
### 结合一起
|
||||||
|
|
||||||
|
输出是三个由点分隔的Base64-URL字符串,可以在HTML和HTTP环境中轻松传递这些字符串,与基于XML的标准(例如SAML)相比,它更紧凑。
|
||||||
|
|
||||||
|
下面显示了一个JWT,它已对先前的标头和有效负载进行了编码,并用一个秘密进行了签名。 编码的JWT
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
如果您想使用JWT并将这些概念付诸实践,则可以使用jwt.io Debugger解码,验证和生成JWT。<a href="http://jwt.io/" target="_blank" >JWT.io调试器</a>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## JSON Web Token工作机制
|
||||||
|
|
||||||
|
在身份验证中,当用户使用其凭据成功登录时,将返回JSON Web令牌。由于令牌是凭据,因此必须格外小心以防止安全问题。通常,令牌的保留时间不应超过要求的时间。
|
||||||
|
|
||||||
|
由于缺乏安全性,您也不应该将敏感的会话数据存储在浏览器中。
|
||||||
|
|
||||||
|
每当用户想要访问受保护的路由或资源时,用户代理通常应使用授权<b>Authorization</b>在<b>Bearer</b>承载模式标头中发送JWT 。标头的内容应如下所示:
|
||||||
|
```json
|
||||||
|
Authorization: Bearer [token]
|
||||||
|
```
|
||||||
|
在某些情况下,这可以是无状态授权机制。服务器的受保护路由将在<b>Authorization</b>标头中检查有效的JWT ,如果存在,则将允许用户访问受保护的资源。如果JWT包含必要的数据,则可以减少查询数据库中某些操作的需求,尽管这种情况并非总是如此。
|
||||||
|
|
||||||
|
如果令牌是在<b>Authorization</b>标头中发送的,则跨域资源共享(CORS)不会成为问题,因为它不使用cookie。
|
||||||
|
|
||||||
|
下图显示了如何获取JWT并将其用于访问API或资源:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
JSON Web令牌如何工作
|
||||||
|
|
||||||
|
应用程序或客户端向授权服务器请求授权。这是通过不同的授权流程之一执行的。例如,典型的符合<a href="http://openid.net/connect/" target="_blank">OpenID Connect</a>的 Web应用程序将<a href="http://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth" target="_blank">/oauth/authorize</a>使用授权代码流通过端点。
|
||||||
|
授予授权后,授权服务器会将访问令牌返回给应用程序。
|
||||||
|
该应用程序使用访问令牌来访问受保护的资源(例如API)。
|
||||||
|
请注意,使用签名的令牌,令牌中包含的所有信息都会暴露给用户或其他方,即使他们无法更改它。这意味着您不应将机密信息放入令牌中。
|
||||||
|
|
||||||
|
## 如何使用JSON Web Token
|
||||||
|
|
||||||
|
让我们谈谈与Simple Web Tokens(SWT)和Security Assertion Markup Language Tokens安全性声明标记语言令牌(SAML)相比,JSON Web Tokens(JWT)的优势。
|
||||||
|
|
||||||
|
由于JSON不如XML冗长,因此在编码时JSON的大小也较小,从而使JWT比SAML更为紧凑。这使得JWT是在HTML和HTTP环境中传递的不错的选择。
|
||||||
|
|
||||||
|
在安全方面,只能使用HMAC算法由共享机密对SWT进行对称签名。但是,JWT和SAML令牌可以使用X.509证书形式的公用/专用密钥对进行签名。与签名JSON的简单性相比,使用XML数字签名对XML进行签名而不引入模糊的安全漏洞是非常困难的。
|
||||||
|
|
||||||
|
JSON解析器在大多数编程语言中都很常见,因为它们直接映射到对象。相反,XML没有自然的文档到对象映射。与SAML断言相比,这使使用JWT更加容易。
|
||||||
|
|
||||||
|
关于用法,JWT是在Internet规模上使用的。这强调了在多个平台(尤其是移动平台)上对JSON Web令牌进行客户端处理的简便性。
|
||||||
|
|
||||||
|

|
||||||
|
比较已编码的JWT和已编码的SAML的长度 编码的JWT和编码的SAML的长度比较
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
---
|
||||||
|
title: OAuth2.0协议
|
||||||
|
sidebar_position: 1
|
||||||
|
---
|
||||||
|
## 什么是OAuth2
|
||||||
|
|
||||||
|
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
|
||||||
|
|
||||||
|
OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
|
||||||
|
|
||||||
|
采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程更简单和安全。
|
||||||
|
|
||||||
|
扩展阅读参看:<a href="http://oauth.net/2/" target="_blank">OAuth标准(英文)</a> | <a href="http://zh.wikipedia.org/zh/OAuth" target="_blank">OAuth维基百科(中文)</a>
|
||||||
|
|
||||||
|
## 应用场景
|
||||||
|
|
||||||
|
第三方应用授权登录:在APP或者网页接入一些第三方应用时,时长会需要用户登录另一个合作平台,比如QQ,微博,微信的授权登录。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
原生app授权:app登录请求后台接口,为了安全认证,所有请求都带token信息,如果登录验证、请求后台数据。
|
||||||
|
|
||||||
|
前后端分离单页面应用(spa):前后端分离框架,前端请求后台数据,需要进行oauth2安全认证,比如使用vue、react后者h5开发的app。
|
||||||
|
|
||||||
|
## 名词定义
|
||||||
|
|
||||||
|
(1) Third-party application:第三方应用程序,本文中又称"客户端"(client),比如打开知乎,使用第三方登录,选择qq登录,这时候知乎就是客户端。
|
||||||
|
|
||||||
|
(2)HTTP service:HTTP服务提供商,本文中简称"服务提供商",即上例的qq。
|
||||||
|
|
||||||
|
(3)Resource Owner:资源所有者,本文中又称"用户"(user),即登录用户。
|
||||||
|
|
||||||
|
(4)User Agent:用户代理,本文中就是指浏览器。
|
||||||
|
|
||||||
|
(5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
|
||||||
|
|
||||||
|
(6)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
|
||||||
|
|
||||||
|
## 运行流程
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
(A)用户打开客户端以后,客户端要求用户给予授权。
|
||||||
|
|
||||||
|
(B)用户同意给予客户端授权。
|
||||||
|
|
||||||
|
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
|
||||||
|
|
||||||
|
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
|
||||||
|
|
||||||
|
(E)客户端使用令牌,向资源服务器申请获取资源。
|
||||||
|
|
||||||
|
(F)资源服务器确认令牌无误,同意向客户端开放资源。
|
||||||
|
|
||||||
|
## 四种授权模式
|
||||||
|
|
||||||
|
授权码模式(authorization code)
|
||||||
|
|
||||||
|
简化模式(implicit)
|
||||||
|
|
||||||
|
密码模式(resource owner password credentials)
|
||||||
|
|
||||||
|
客户端模式(client credentials)
|
||||||
|
|
||||||
|
### 授权码模式
|
||||||
|
|
||||||
|
授权码模式(authorization code)是功能最完整、流程最严密的授权模式。
|
||||||
|

|
||||||
|
|
||||||
|
(1)用户访问客户端,后者将前者导向认证服务器,假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
|
||||||
|
|
||||||
|
(2)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌:GET /oauth/token?response_type=code&client_id=test&redirect_uri=重定向页面链接。请求成功返回code授权码,一般有效时间是10分钟。
|
||||||
|
|
||||||
|
(3)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。POST /oauth/token?response_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向页面链接。请求成功返回access Token和refresh Token。
|
||||||
|
|
||||||
|
|
||||||
|
### 简化模式Implicit
|
||||||
|
|
||||||
|
适用于公开的浏览器单页应用
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Access Token直接从授权服务器返回(只有前端渠道)
|
||||||
|
|
||||||
|
不支持refresh tokens
|
||||||
|
|
||||||
|
假定资源所有者和公开客户应用在同一个设备上
|
||||||
|
|
||||||
|
最容易受安全攻击
|
||||||
|
|
||||||
|
|
||||||
|
### 用户名密码 Resource Owner Credentials
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
使用用户名密码登录的应用,例如桌面App
|
||||||
|
|
||||||
|
使用用户名/密码作为授权方式从授权服务器上获取access token
|
||||||
|
|
||||||
|
一般不支持refresh token
|
||||||
|
|
||||||
|
假定资源拥有者和公开客户子啊相同设备上
|
||||||
|
|
||||||
|
|
||||||
|
### 客户端凭证 Client Credentials
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
适用于服务器见通信场景,机密客户代表它自己或者一个用户
|
||||||
|
|
||||||
|
只有后端渠道,使用客户凭证获取一个access token
|
||||||
|
|
||||||
|
因为客户凭证可以使用对称或者非对称加密,该方式支持共享密码或者证书
|
||||||
|
|
||||||
@ -0,0 +1,228 @@
|
|||||||
|
---
|
||||||
|
title: OpenID Connect协议
|
||||||
|
sidebar_position: 2
|
||||||
|
---
|
||||||
|
## OpenID Connect简介
|
||||||
|
OpenID Connect是基于OAuth 2.0规范族的可互操作的身份验证协议。它使用简单的REST / JSON消息流来实现,和之前任何一种身份认证协议相比,开发者可以轻松集成。
|
||||||
|
|
||||||
|
OpenID Connect允许开发者验证跨网站和应用的用户,而无需拥有和管理密码文件。OpenID Connect允许所有类型的客户,包括基于浏览器的JavaScript和本机移动应用程序,启动登录流动和接收可验证断言对登录用户的身份。
|
||||||
|
|
||||||
|
扩展阅读参看:官方技术说明<a href="http://openid.net/connect/" title="http://openid.net/connect/" target="_blank" rel="nofollow">Connect标准(英文) </a> | <a href="http://en.wikipedia.org/wiki/OpenID_Connect" title="http://en.wikipedia.org/wiki/OpenID_Connect" target="_blank" rel="nofollow">OpenID Connect维基百科(en)</a>
|
||||||
|
|
||||||
|
|
||||||
|
## OpenID的历史是什么?
|
||||||
|
OpenID Connect是OpenID的第三代技术。首先是原始的OpenID,它不是商业应用,但让行业领导者思考什么是可能的。OpenID 2.0设计更为完善,提供良好的安全性保证。然而,其自身存在一些设计上的局限性,最致命的是其中依赖方必须是网页,但不能是本机应用程序;此外它还要依赖XML,这些都会导致一些应用问题。
|
||||||
|
|
||||||
|
OpenID Connect的目标是让更多的开发者使用,并扩大其使用范围。幸运的是,这个目标并不遥远,现在有很好的商业和开源库来帮助实现身份验证机制。
|
||||||
|
|
||||||
|
## OIDC基础
|
||||||
|
简要而言,OIDC是一种安全机制,用于应用连接到身份认证服务器(Identity Service)获取用户信息,并将这些信息以安全可靠的方法返回给应用。
|
||||||
|
|
||||||
|
在最初,因为OpenID1/2经常和OAuth协议(一种授权协议)一起提及,所以二者经常被搞混。
|
||||||
|
|
||||||
|
OpenID是Authentication,即认证,对用户的身份进行认证,判断其身份是否有效,也就是让网站知道“你是你所声称的那个用户”;
|
||||||
|
OAuth是Authorization,即授权,在已知用户身份合法的情况下,经用户授权来允许某些操作,也就是让网站知道“你能被允许做那些事情”。
|
||||||
|
由此可知,授权要在认证之后进行,只有确定用户身份只有才能授权。
|
||||||
|
(身份验证)+ OAuth 2.0 = OpenID Connect
|
||||||
|
|
||||||
|
OpenID Connect是“认证”和“授权”的结合,因为其基于OAuth协议,所以OpenID-Connect协议中也包含了client_id、client_secret还有redirect_uri等字段标识。这些信息被保存在“身份认证服务器”,以确保特定的客户端收到的信息只来自于合法的应用平台。这样做是目的是为了防止client_id泄露而造成的恶意网站发起的OIDC流程。
|
||||||
|
|
||||||
|
举个例子。某个用户使用Facebook应用“What online quiz best describes you?” ,该应用可以通过Facebook账号登录,则你可以在应用中发起请求到“身份认证服务器”(也就是Facebook的服务器)请求登录。这时你会看到如下界面,询问是否授权。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
在OAuth中,这些授权被称为scope。OpenID-Connect也有自己特殊的scope--openid ,它必须在第一次请求“身份鉴别服务器”(Identity Provider,简称IDP)时发送过去。
|
||||||
|
|
||||||
|
## OIDC流程
|
||||||
|
OAuth2提供了Access Token来解决授权第三方客户端访问受保护资源的问题;相似的,OIDC在这个基础上提供了ID Token来解决第三方客户端标识用户身份认证的问题。OIDC的核心在于在OAuth2的授权流程中,一并提供用户的身份认证信息(ID-Token)给到第三方客户端,ID-Token使用JWT格式来包装,得益于JWT(JSON Web Token)的自包含性,紧凑性以及防篡改机制,使得ID-Token可以安全的传递给第三方客户端程序并且容易被验证。应有服务器,在验证ID-Token正确只有,使用Access-Token向UserInfo的接口换取用户的更多的信息。
|
||||||
|
|
||||||
|
有上述可知,OIDC是遵循OAuth协议流程,在申请Access-Token的同时,也返回了ID-Token来验证用户身份。
|
||||||
|
|
||||||
|
### 相关定义
|
||||||
|
|
||||||
|
EU:End User,用户。
|
||||||
|
|
||||||
|
RP:Relying Party ,用来代指OAuth2中的受信任的客户端,身份认证和授权信息的消费方;
|
||||||
|
|
||||||
|
OP:OpenID Provider,有能力提供EU身份认证的服务方(比如OAuth2中的授权服务),用来为RP提供EU的身份认证信息;
|
||||||
|
|
||||||
|
ID-Token:JWT格式的数据,包含EU身份认证的信息。
|
||||||
|
|
||||||
|
UserInfo Endpoint:用户信息接口(受OAuth2保护),当RP使用ID-Token访问时,返回授权用户的信息,此接口必须使用HTTPS。
|
||||||
|
|
||||||
|
下面我们来看看OIDC的具体协议流程。
|
||||||
|
|
||||||
|
根据应用客户端的不同,OIDC的工作模式也应该是不同的。和OAuth类似,主要看是否客户端能保证client_secret的安全性。
|
||||||
|
|
||||||
|
如果是JS应用,其所有的代码都会被加载到浏览器而暴露出来,没有后端可以保证client_secret的安全性,则需要是使用默认模式流程(Implicit Flow)。
|
||||||
|
|
||||||
|
如果是传统的客户端应用,后端代码和用户是隔离的,能保证client_secret的不被泄露,就可以使用授权码模式流程(Authentication Flow)。
|
||||||
|
|
||||||
|
此外还有混合模式流程(Hybrid Flow),简而言之就是以上二者的融合。
|
||||||
|
|
||||||
|
OAuth2中还有口令模式和“应有访问模式”的方式来获取Access Token(关于OAuth2的内容,可以参见OAuth2.0 协议入门指南),为什么OIDC没有扩展这些方式呢?
|
||||||
|
"口令模式"是需要用户提供账号和口令给RP的,既然都已经有用户名和口令了,就不需要在获取什么用户身份了。至于“应有访问模式”,这种方式不需要用户参与,也就无需要认证和获取用户身份了。这也能反映授权和认证的差异,以及只使用OAuth2来做身份认证的事情是远远不够的,也是不合适的。
|
||||||
|
|
||||||
|
### 授权码模式流程
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
授权码模式流程
|
||||||
|
和OAuth认证流程类似
|
||||||
|
|
||||||
|
RP发送一个认证请求给OP,其中附带client_id;
|
||||||
|
|
||||||
|
OP对EU进行身份认证;
|
||||||
|
|
||||||
|
OP返回响应,发送授权码给RP;
|
||||||
|
|
||||||
|
RP使用授权码向OP索要ID-Token和Access-Token,RP验证无误后返回给RP;
|
||||||
|
|
||||||
|
RP使用Access-Token发送一个请求到UserInfo EndPoint; UserInfo EndPoint返回EU的Claims。
|
||||||
|
|
||||||
|
|
||||||
|
#### 基于Authorization Code的认证请求
|
||||||
|
RP使用OAuth2的Authorization-Code的方式来完成用户身份认证,所有的Token都是通过OP的Token EndPoint(OAuth2中定义)来发放的。构建一个OIDC的Authentication Request需要提供如下的参数:
|
||||||
|
|
||||||
|
scope:必须。OIDC的请求必须包含值为“openid”的scope的参数。
|
||||||
|
|
||||||
|
response_type:必选。同OAuth2。
|
||||||
|
|
||||||
|
client_id:必选。同OAuth2。
|
||||||
|
|
||||||
|
redirect_uri:必选。同OAuth2。
|
||||||
|
|
||||||
|
state:推荐。同OAuth2。防止CSRF, XSRF。
|
||||||
|
|
||||||
|
示例如下:
|
||||||
|
|
||||||
|
```http
|
||||||
|
GET /authorize?
|
||||||
|
response_type=code
|
||||||
|
&scope=openid%20profile%20email
|
||||||
|
&client_id=s6BhdRkqt3
|
||||||
|
&state=af0ifjsldkj
|
||||||
|
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb HTTP/1.1
|
||||||
|
Host: server.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 基于Authorization Code的认证请求的响应
|
||||||
|
在OP接收到认证请求之后,需要对请求参数做严格的验证,具体的规则参见http://openid.net/specs/openid-connect-core-1_0.html#AuthRequestValidation,验证通过后引导EU进行身份认证并且同意授权。在这一切都完成后,会重定向到RP指定的回调地址(redirect_uri),并且把code和state参数传递过去。比如:
|
||||||
|
|
||||||
|
```http
|
||||||
|
HTTP/1.1 302 Found
|
||||||
|
Location: https://client.example.org/cb?
|
||||||
|
code=SplxlOBeZQQYbYS6WxSbIA
|
||||||
|
&state=af0ifjsldkj
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 获取ID Token
|
||||||
|
RP使用上一步获得的code来请求Token EndPoint,这一步桶OAuth2,就不再展开细说了。然后Token EndPoint会返回响应的Token,其中除了OAuth2规定的部分数据外,还会附加一个id_token的字段。id_token字段就是上面提到的ID Token。例如:
|
||||||
|
|
||||||
|
```json
|
||||||
|
HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/json
|
||||||
|
Cache-Control: no-store
|
||||||
|
Pragma: no-cache
|
||||||
|
|
||||||
|
{
|
||||||
|
"access_token": "SlAV32hkKG",
|
||||||
|
"token_type": "Bearer",
|
||||||
|
"refresh_token": "8xLOxBtZp8",
|
||||||
|
"expires_in": 3600,
|
||||||
|
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzc
|
||||||
|
yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5
|
||||||
|
NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZ
|
||||||
|
fV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5Nz
|
||||||
|
AKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6q
|
||||||
|
Jp6IcmD3HP99Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJ
|
||||||
|
NqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7Tpd
|
||||||
|
QyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoS
|
||||||
|
K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4
|
||||||
|
XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
|
||||||
|
}```
|
||||||
|
|
||||||
|
其中看起来一堆乱码的部分就是JWT格式的ID-Token。在RP拿到这些信息之后,需要对id_token以及access_token进行验证(具体的规则参见http://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation和http://openid.net/specs/openid-connect-core-1_0.html#ImplicitTokenValidation)。至此,可以说用户身份认证就可以完成了,后续可以根据UserInfo EndPoint获取更完整的信息。
|
||||||
|
|
||||||
|
#### 安全令牌 ID-Token
|
||||||
|
|
||||||
|
上面提到过OIDC对OAuth2最主要的扩展就是提供了ID-Token。下面我们就来看看ID-Token的主要构成:
|
||||||
|
|
||||||
|
iss = Issuer Identifier:必须。提供认证信息者的唯一标识。一般是Url的host+path部分;
|
||||||
|
|
||||||
|
sub = Subject Identifier:必须。iss提供的EU的唯一标识;最长为255个ASCII个字符;
|
||||||
|
|
||||||
|
aud = Audience(s):必须。标识ID-Token的受众。必须包含OAuth2的client_id;
|
||||||
|
|
||||||
|
exp = Expiration time:必须。ID-Token的过期时间;
|
||||||
|
|
||||||
|
iat = Issued At Time:必须。JWT的构建的时间。
|
||||||
|
|
||||||
|
auth_time = AuthenticationTime:EU完成认证的时间。如果RP发送认证请求的时候携带max_age的参数,则此Claim是必须的。
|
||||||
|
|
||||||
|
nonce:RP发送请求的时候提供的随机字符串,用来减缓重放攻击,也可以来关联ID-Token和RP本身的Session信息。
|
||||||
|
|
||||||
|
acr = Authentication Context Class Reference:可选。表示一个认证上下文引用值,可以用来标识认证上下文类。
|
||||||
|
|
||||||
|
amr = Authentication Methods References:可选。表示一组认证方法。
|
||||||
|
|
||||||
|
azp = Authorized party:可选。结合aud使用。只有在被认证的一方和受众(aud)不一致时才使用此值,一般情况下很少使用。
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"iss": "https://server.example.com",
|
||||||
|
"sub": "24400320",
|
||||||
|
"aud": "s6BhdRkqt3",
|
||||||
|
"nonce": "n-0S6_WzA2Mj",
|
||||||
|
"exp": 1311281970,
|
||||||
|
"iat": 1311280970,
|
||||||
|
"auth_time": 1311280969,
|
||||||
|
"acr": "urn:mace:incommon:iap:silver"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
另外ID Token必须使用JWT(JSON Web Token)进行签名和JWE(JSON Web Encryption)加密,从而提供认证的完整性、不可否认性以及可选的保密性。关于JWT的更多内容,请参看JSON Web Token - 在Web应用间安全地传递信息
|
||||||
|
|
||||||
|
### 默认模式流程
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
默认模式流程
|
||||||
|
默认流程和OAuth中的类似,只不过也是添加了ID-Token的相关内容。
|
||||||
|
|
||||||
|
这里需要说明的是:OIDC的说明文档里很明确的说明了用户的相关信息都要使用JWT形式编码。在JWT中,不应该在载荷里面加入任何敏感的数据。如果传输的是用户的User ID。这个值实际上不是什么敏感内容,一般情况下被知道也是安全的。
|
||||||
|
|
||||||
|
但是现在工业界已经不推荐使用OAuth默认模式,而推荐使用不带client_Secret的授权码模式。
|
||||||
|
|
||||||
|
### 混合模式
|
||||||
|
混合模式简而言之就是以上提到的两种模式的混合,不过也有一些小的改变,就是允许直接向客户端返回Access-Token。
|
||||||
|
|
||||||
|
业界普遍认为,后端传递Token(比如服务器之间通信)要比前端(比如页面之间)可靠,所以如果直接返回令牌的情况下会把令牌的过期时间设置较短,但是比较
|
||||||
|
|
||||||
|
UserInfo Endpoint
|
||||||
|
可能有的读者发现了,ID-Token只有sub是和EU相关的,这在一般情况下是不够的,必须还需要EU的用户名,头像等其他的资料,OIDC提供了一组公共的cliams,来提供更多用户的信息,这就是——UserIndo EndPoin。
|
||||||
|
|
||||||
|
在RP得到Access Token后可以请求此资源,然后获得一组EU相关的Claims,这些信息可以说是ID-Token的扩展,ID-Token中只需包含EU的唯一标识sub即可(避免ID Token过于庞大和暴露用户敏感信息),然后在通过此接口获取完整的EU的信息。此资源必须部署在TLS之上,例如:
|
||||||
|
|
||||||
|
```http
|
||||||
|
GET /userinfo HTTP/1.1
|
||||||
|
Host: server.example.com
|
||||||
|
Authorization: Bearer SlAV32hkKG
|
||||||
|
```
|
||||||
|
|
||||||
|
成功之后响应如下:
|
||||||
|
|
||||||
|
```json
|
||||||
|
HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"sub": "248289761001",
|
||||||
|
"name": "Jane Doe",
|
||||||
|
"given_name": "Jane",
|
||||||
|
"family_name": "Doe",
|
||||||
|
"preferred_username": "j.doe",
|
||||||
|
"email": "janedoe@example.com",
|
||||||
|
"picture": "http://example.com/janedoe/me.png"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
其中sub代表EU的唯一标识,这个claim是必须的,其他的都是可选的。
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
---
|
||||||
|
title: SAML2.0协议
|
||||||
|
sidebar_position: 5
|
||||||
|
---
|
||||||
|
## SAML 介绍
|
||||||
|
|
||||||
|
SAML即安全断言标记语言,英文全称是Security Assertion Markup Language。它是一个基于XML的标准,用于在不同的安全域(security domain)之间用户身份验证和授权数据交换。在SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域。 SAML是OASIS组织安全服务技术委员会(Security Services Technical Committee)的产品。官方技术说明可参看OASIS Security Services (SAML) TC.
|
||||||
|
|
||||||
|
使用SAML,在线服务供应商可以联系一个独立的网络身份认证提供者,谁是试图访问受保护的内容的用户进行身份验证。
|
||||||
|
|
||||||
|
联邦是指两个或更多可信的业务合作伙伴组成的团体,其遵照的业务和技术协议允许来自联邦合作伙伴(成员公司)的用户以一种安全可靠的方式,无缝地访问另一家合作伙伴的资源。在联邦业务模型中(其中,服务是联邦化的,或可以与业务合作伙伴共享),根据有关实体间达成的协议,一家公司的用户的身份将被转换,以合法访问另一家公司的Web站点,而另一家公司无需了解该用户的原始身份。
|
||||||
|
|
||||||
|
|
||||||
|
IDP认证中心提供了一个基于SAML的单点登录(SSO)服务,作为身份提供者(Identity provider),控制用户名、密码和其他信息,用于识别,身份验证和授权用户的Web应用程序。
|
||||||
|
|
||||||
|
备注:SAML应用集成需完成应用集成申请,详见SAML相关内容。
|
||||||
|
|
||||||
|
通过SAML实现IDP 与其他合作伙伴的联邦身份认证。
|
||||||
|
|
||||||
|
## 流程说明图
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
<h3>SAML实现联邦身份认证各方职责</h3>
|
||||||
|
|
||||||
|
<table border="0" class="table table-striped table-bordered ">
|
||||||
|
<thead>
|
||||||
|
<th>IDP认证中心(Identity Provider/IDP)</th><th>合作伙伴(Service Provider/SP)</th>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>用户身份认证</td>
|
||||||
|
<td>安全断言判定</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>联邦身份安全断言</td>
|
||||||
|
<td>联邦身份维护</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>用户账号管理</td>
|
||||||
|
<td>服务提供和访问控制</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
IDP和SP预先完成证书的互信配置,SAML认证基于断言,断言基于证书的加密,传递过程是安全的,只有证书的持有者才能对断言进行解析
|
||||||
|
|
||||||
|
重要注意:SAML SSO解决方案仅适用于Web应用程序.
|
||||||
|
|
||||||
|
扩展阅读参看:官方技术说明<a href="https://wiki.oasis-open.org/security/FrontPage" title="https://wiki.oasis-open.org/security/FrontPage" target="_blank" rel="nofollow">SAML标准(英文) </a> | <a href="http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language" title="http://en.wikipedia.org/wiki/Security_Assertion_Markup_Language" target="_blank" rel="nofollow">SAML维基百科(中文)</a>
|
||||||
|
|
||||||
|
## SP-Init SSO流程
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
用户试图访问IDP的合作伙伴应用。
|
||||||
|
|
||||||
|
合作伙伴应用生成一个SAML身份验证请求。SAML请求编码并嵌入到URL IDP的SSO服务。RelayState参数包含编码的合作伙伴应用程序,用户尝试访问的URL也被嵌入在SSO URL。这的RelayState参数,就是要一个不透明的标识符,不作任何修改或检查传回的。
|
||||||
|
|
||||||
|
合作伙伴发送重定向到用户的浏览器。重定向URL编码SAML身份验证请求的,应提交到IDP的SSO服务。
|
||||||
|
|
||||||
|
IDP的SAML请求进行解码,并提取两个谷歌的断言消费服务(ACS)和用户的目标URL(RelayState参数)的URL。
|
||||||
|
|
||||||
|
IDP的用户进行身份验证。IDP可以通过要求有效的登录凭据,或通过检查有效的会话对用户进行身份验证。
|
||||||
|
|
||||||
|
IDP生成一个SAML响应,其中包含身份验证的用户的用户名。按照SAML 2.0规范,这种反应是公共和私人合作伙伴的DSA / RSA密钥数字签名的
|
||||||
|
|
||||||
|
IDP SAML响应和RelayState参数进行编码,并将该信息返回到用户的浏览器。IDP提供了一种机制,使浏览器可以转发信息到合作伙伴的ACS。
|
||||||
|
|
||||||
|
合作伙伴的ACS使用IDP的公钥验证SAML响应。如果成功验证的响应,ACS将用户重定向的目标URL。
|
||||||
|
|
||||||
|
用户被重定向的目标URL,并记录在合作伙伴应用程序。
|
||||||
|
|
||||||
|
## IDP-Init SSO流程
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
IDP的用户进行身份验证。IDP可以通过要求有效的登录凭据,或通过检查有效的会话对用户进行身份验证。
|
||||||
|
|
||||||
|
IDP生成一个SAML响应,其中包含身份验证的用户的用户名。按照SAML 2.0规范,这种反应是公共和私人合作伙伴的DSA / RSA密钥数字签名的。
|
||||||
|
|
||||||
|
IDP SAML响应和RelayState参数进行编码,并将该信息返回到用户的浏览器。IDP提供了一种机制,使浏览器可以转发信息到合作伙伴的ACS。
|
||||||
|
|
||||||
|
合作伙伴的ACS使用IDP的公钥验证SAML响应。如果成功验证的响应,ACS将用户重定向的目标URL。
|
||||||
|
|
||||||
|
用户被重定向的目标URL,并记录在合作伙伴应用程序。
|
||||||
@ -0,0 +1,96 @@
|
|||||||
|
---
|
||||||
|
title: TokenBased协议
|
||||||
|
sidebar_position: 6
|
||||||
|
---
|
||||||
|
## TokenBased介绍
|
||||||
|
|
||||||
|
TokenBased(基于令牌)的认证,是一种简单的令牌的认证,即认证中心和应用共享凭证或者数字证书,认证中心使用HTTP POST的方式提交令牌到应用系统,应用系统并随后进行身份验证;
|
||||||
|
|
||||||
|
## 交互概要
|
||||||
|
|
||||||
|
该技术的实现步骤是:
|
||||||
|
<ol>
|
||||||
|
<li>一个未经身份验证的用户通过浏览器访问应用系统。</li>
|
||||||
|
<li>应用系统跳转到认证中心,请求认证。</li>
|
||||||
|
<li>用户填写自己的用户名和密码,然后按下提交按钮。</li>
|
||||||
|
<li>认证中心完成用户认证,生成令牌并提交到应用系统认证地址。</li>
|
||||||
|
<li>应用系统使用共享凭证或者数字证书验证令牌,从令牌中获取用户认证信息。</li>
|
||||||
|
<li>应用系统完成系统登录。</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
### 令牌加密或者签名方式
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>加密方式:DES、DESede、AES、Blowfish,默认采用DES。</li>
|
||||||
|
<li>签名方式:服务端使用RSA数字证书私钥加密,客户端使用RSA数字证书公钥验证。</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
### 令牌格式
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"randomId":"652ec5f5-fff2-4b8e-b88d-e7ff3a217bca",
|
||||||
|
"uid":"29e82574-b37a-46ab-bac1-5fecbd24b24b",
|
||||||
|
"username":"zhangs1020",
|
||||||
|
"email":"zhangs1020@connsec.com",
|
||||||
|
"windowsAccount":"ZHANGS1020",
|
||||||
|
"employeeNumber":"ZHANGS1020",
|
||||||
|
"departmentId":"1000212",
|
||||||
|
"department":"IT信息中心",
|
||||||
|
"displayName":"张三",
|
||||||
|
"at":"2015-03-11T15:17:03.855Z",
|
||||||
|
"expires":"2015-03-11T15:18:03.855Z"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
randomId是即时生成的随机数<br/>
|
||||||
|
at是当前认证的时间<br/>
|
||||||
|
expires是过期的间隔<br/>
|
||||||
|
其他的字段可在管理控制台配置
|
||||||
|
|
||||||
|
## 简单令牌
|
||||||
|
|
||||||
|
认证用户名@@认证时间(UTC时间),例如:
|
||||||
|
|
||||||
|
```json
|
||||||
|
testUser@2010-01-01T01:01:01.001Z
|
||||||
|
```
|
||||||
|
|
||||||
|
### 令牌加密
|
||||||
|
|
||||||
|
加密步骤:
|
||||||
|
<ol>
|
||||||
|
<li>申请公共的秘钥。</li>
|
||||||
|
<li>使用秘钥对产生的Token使用DES、DESede、AES、Blowfish进行加密,默认采用DES。</li>
|
||||||
|
<li>对加密的数据进行BASE64URL编码。</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
|
简单token加密结果:<br/>
|
||||||
|
|
||||||
|
```json
|
||||||
|
Y00jv2TCCuk365uB2-nDCUdboygeYFoUfETC7BNXr73dQWwFNRrfYltczDQ5iWg8NTO-GsP--VlR6L-JyNhZSg
|
||||||
|
```
|
||||||
|
|
||||||
|
### 令牌签名
|
||||||
|
|
||||||
|
token的签名格式:BASE64URL(UTF8(data)).BASE64URL(UTF8(signature)),中间用"<em>.</em>"分开,前半部分是数据,后半部分是签名书数据,例如:<br/>
|
||||||
|
```json
|
||||||
|
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ<em>.</em>dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
|
||||||
|
```
|
||||||
|
|
||||||
|
## LTPA介绍
|
||||||
|
|
||||||
|
LTPA是Lightweight ThirdParty Authentication简称,轻量级第三方认证,支持在一个因特网域中的一组 Web 服务器之间使用单一登录的认证框架,即通过cookie来传输Token。
|
||||||
|
|
||||||
|
当服务器配置LTPA认证方式,用户通过浏览器成功登录,服务器会自动发送一个session cookie给浏览器,此cookie中包含一个加密和签名Security Token信息,应用服务器根据Security Token解析得到登录用户信息自动完成应用系统认证。
|
||||||
|
|
||||||
|
### 交互概要
|
||||||
|
|
||||||
|
该技术的实现步骤是:
|
||||||
|
<ol>
|
||||||
|
<li>一个未经身份验证的用户通过浏览器访问应用系统,应用系统跳转到认证中心。</li>
|
||||||
|
<li>认证中心完成用户登录,把Security Token发给浏览器,并跳转到应用系统。</li>
|
||||||
|
<li>应用系统解析Security Token,得出用户登录信息。</li>
|
||||||
|
<li>应用系统使用用户信息完成自身的登录。</li>
|
||||||
|
</ol>
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 2
|
||||||
|
---
|
||||||
|
# 单点注销
|
||||||
|
|
||||||
|
单点注销(Single Logout)是指用户在一个系统退出后,其所能单点登录访问的所有系统都同时退出。单点注销主要是为提高安全性,避免用户忘记退出所有应用而造成信息的泄密。
|
||||||
|
|
||||||
|
|
||||||
|
IDP支持单点注销(SLO),即用户不仅仅从认证中心注销,同时也注销从认证中心访问的应用系统。
|
||||||
|
|
||||||
|
|
||||||
|
其实现方式也非常简单,由于SSO和单点登录的应用都是分开的,使用不同的域名,只是通过认证中心在多个应用系统中传递身份和登录系统。因此,首先注销单点登录应用,然后修改每个应用系统都使用SSO的单点注销页面,SSO的退出页面会将用户登录的Session注销掉。
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user