记一次应用接入第三方统一认证服务的过程, 基于 JWT 和 OAuth2.0
需求描述:一套应用服务,有自己的独立登录接口,独立认证服务(JWT 认证),独立用户等,需要接入第三方的统一认证系统,实现用户统一登录;
需求分析:
实现统一用户和单点登录,需要是:
首先用户同步,用户数量小,可以通过手动新建,然后和统一用户关联的方式;
对于只有统一登录,不需要统一用户的,需要自动新建用户或关联已有用户
其次是统一登录页面:可以保留自有登录页面,通过不同接口跳转到统一登录页面做验证;
jwt 方式不提供统一登出服务;
需求实现说明
用户同步:先手动新建,或在登录时自动新建,或先同步用户信息;
提供登陆接口:在应用中提供一个新的登录接口(restful 接口),跳转的统一登录页,在跳转过程中提供必要参数;
统一登录回调: 在应用中提供一个统一登录后的回调接口,用于验证是否登录成功;
生成应用 JWT:在统一登录结果验证成功后,则生成应用中的 jwt,放置到 Cookie 中,跳转到应用页面;
验证 jwt: 在应用页面中验证 jwt,jwt 是应用生成,是可用的;
代码实现:
用户同步:可用手动新建测试;
提供登录跳转接口:
Oauth2.0 认证服务一般会提供一个登录地址:传递以下参数:
一个登陆成功的回调地址 redirectUri 一个原值返回的参数 state,一般会填写登录后的跳转页面统一认证系统应用的 id 和 secret
以下代码提供了一个登录接口,跳转的统一登录页面,并携带指定参数;
在统一登录页面,用户输入用户名密码登录,通过成功后,回调应用上一步登录验证接口;
Oauth2.0 一般情况下,会返回一个 code 给应用;应用接收 code,通过统一登录接口,获取登录用户 ID 应用获取登录用户 ID,生成 JWTtoken 将 jwt_token 放置到 cookie 中,跳转的指定页面
跳转后的页面为应用页面,在调用应用接口时,会验证 jwt 是否有效
接入完成;
其他接入方式,可能接口不同,但是流程应该大致相似
版权声明: 本文为 InfoQ 作者【技能实验室】的原创文章。
原文链接:【http://xie.infoq.cn/article/5a1c94cc7b5359eefa3512638】。文章转载请联系作者。
评论