koa-sso
用于koa2对接兑吧sso单点登录
流程介绍
一般,我们会在自己的服务也实现一套用户系统,然后去支持sso登录
- 判断用户未登录
- 跳转sso登录页面
http://sso.duiba.com.cn/login
并自己拼接systemId
参数,redirect
参数(登录后需要跳转的地址到) - 在sso平台登录,会自动跳转回我们的固定接口
'/sso/ssoIndex'
,并带上ssoStamp
参数 - 在这个接口里,根据
ssoStamp
去拿ticket
通行证,再用ticket
去拿sso账户信息。(这个ticket是可以在本地自己存起来的,如后面一直要校验sso信息,可以省略之前步骤直接用ticket去取) - sso登录成功,后面就是自己的业务逻辑
use
const Koa = require('koa')
const app = new Koa()
const koaSso = require('koa-sso')
app.use(koaSso({
ssourl: 'https://sso.duibatest.com.cn/',
systemId: 29,
systemName: 'jimo',
appSecret: '95cfda1e006330958c2abbefd64d5259',
profiles: 'test'
}))
/**
* sso要求本地实现的一个接口,用来对接sso
*/
const router = require('koa-router')
router.get('/sso/ssoIndex', async ctx => {
// 获取通行证
let ticket = await ctx.sso.findTicketByStamp()
// 获取sso账号信息
let ssoData = await ctx.sso.verifyTicketAndGetAdmin(ticket)
if (ssoData) {
// 至此,已获取sso信息,后面只需将用户置为登录状态
console.log(ssoData.id)
/****** 以下根据具体业务场景自己写 ******/
/****** 例: ******/
// koa-session 登录
ctx.session.userId = ssoData.id
ctx.success('登录成功')
const params = qs.parse(ctx.request.querystring)
// 登录成功后跳转到之前所在页面
if (params.redirect) {
ctx.response.redirect(params.redirect);
}
} else {
ctx.success('sso信息过期,请清空cookie后重试!')
}
})
接口: await fn()调用
通过凭证获取的通行证(原来使用链接参数方式跨域传递通行证,不安全)
ctx.sso.findTicketByStamp()
登录验证接口(验证失败返回null)
ctx.sso.verifyTicketAndGetAdmin()
获取一个用户所有的角色 ctx.sso.getAdminAllRoles()
获取用户在系统下的权限 ctx.sso.getPowerIdsBySystemIdAndAdminId()
加载整个系统得权限树 ctx.sso.loadPowerList()
登出sso ctx.sso.outLogin()
获取整个系统的角色 ctx.sso.getApplicationAllRoles()
获取拥有某个角色的用户 (不传则返回所有能访问系统的用户) ctx.sso.findAdminsByRoleName()