-
Notifications
You must be signed in to change notification settings - Fork 18
helpManual sso
tolizhan edited this page Apr 29, 2022
·
4 revisions
大部分系统都需要登录及权限管理功能 综合演示中有使用示例
该单点登录便是集成这两大功能并且实现统一登录登出状态的同步
这个模块可以独立部署, 也可通过扩展对接LDAP, 实现帐号全局管理
该单点登录便是集成这两大功能并且实现统一登录登出状态的同步
这个模块可以独立部署, 也可通过扩展对接LDAP, 实现帐号全局管理

- 系统对接时有两种方式, 接口对接 和 跳转对接, 配置 _of.sso 修改对应参数
- 该模块同时拥有用户管理及权限管理 访问路径 OF_URL/include/of/index.php?c=of_base_sso_main&a=index 自动创建数据库 帐号 admin 密码 123456
- 包含对"用户", "域名", "角色", "权限"的"添加(xxxAdd)", "修改(xxxMod)", "删除(xxxDel)", "冻结(xxxIce)" 四个功能
- 四个功能可以如上图在对应的角色中用json和RegEx来自定义权限范围,其中"name"为分页中的数据键,还包含如下信息
用户 : 用户ID(id) 帐号(name) 昵称(nick) 标签(lable) 域名 : 域名ID(id) 帐号(name) 简称(note) 角色 : 角色ID(id) 键值(name) 名称(lable) 权限 : 权限ID(id) 键值(name) 名称(lable)权限演示 : { "packMod" : {"range":[{"name":"/^oa/", "lable":"/^oa/"}]}, //只能编辑键值为"oa"开头 并且 名称为"oa"开头 的角色 "funcMod" : {"range":[{"name":"/^oa/"}, {"name":"/^oa/"}]} //只能编辑键值为"oa"开头 或者 名称为"oa"开头 的角色 }
- "接口对接" 方式要将权限管理中将域名帐号设为"前后台对接"
- "接口对接" 方式可以自定义登录界面, 但会泄漏密码给对接平台
<?php if ($temp = of_base_sso_tool::check(true)) { echo '登录帐号: ', $temp, "<br>\n"; echo '拥有权限: ', of_base_sso_tool::role('test') ? '有权' : '无权', "<br>\n"; echo '后台退出: ', of_base_sso_tool::logout(); //未登录 } else { echo '后台登录: '; //登录帐号 $temp = of_base_sso_tool::login(array('user' => 'admin', 'pwd' => '123456')); if ($temp === true) { echo '成功'; } else if ($temp === false) { echo '失败'; } else { echo '错误'; print_r($temp); } }
- "跳转对接" 方式安全快速,所有登录均在SSO系统中完成
- "跳转对接" 方式不需要额外权限,但所有修改功能会受限制
<?php if ($temp = of_base_sso_tool::check(false)) { echo '登录帐号: ', $temp, "<br>\n"; //echo '拥有权限: ', sso::role('demo') ? '有权' : '无权', "<br>\n"; echo '后台退出: ', of_base_sso_tool::logout(); //未登录 } else { //跳转登录 header('Location: ' . of_base_sso_tool::login()); }
内置方法 下载php单文件封装包
isApibool
登录类型, false = 跳转登录, true = 接口登录
spacestring
验证的空间, 指定时会更改默认空间, 默认default
<?php of_base_sso_tool::check(); //已登录返回登录帐号 未登录返回false
argsnull string true array
null = 验证当前用户是否登录string = 生成跳转模式下跳转的连接
array = 接口模式下的登录帐号 需要 "接口对接" 权限 { "user" : 用户名 "pwd" : 登录密码 }
spacestring
指定空间, 默认使用"default"或check设置的值
<?php of_base_sso_tool::login(); //true=成功,false=失败,数组=出错{"state" : 状态码, "msg" : 错误信息}
spacestring
指定空间, 默认使用"default"或check设置的值
<?php of_base_sso_tool::logout(); //已登录 true 未登录 false
keynull string
null = 返回完整的用户信息string = 指定返回的信息 "user"=SSO中的用户ID, "name"=用户名, "role"=角色权限包
spacestring
指定空间, 默认使用"default"或check设置的值
<?php /** null=未登录, 数组=登录结构 { "user" : SSO中的用户ID "name" : 用户名 "nick" : 用户昵称 "notes" : 用户备注 "role" : 角色权限包, 如果登录了存在 { "allow" : 允许访问接口,当获取拥有权限时存在 { "pack" : { 角色名 : { "data" : 角色自带的数据 "func" : {功能名1:功能名1, 功能名2:功能名2...} } } "func" : { 功能名 : { "data" : 功能自带的数据 } } }, "deny" : 拒绝访问接口,当获取没有权限时存在 { "pack" : { 角色名 : { "data" : 角色自带的数据 "func" : {功能名1:功能名1, 功能名2:功能名2...} } } "func" : { 功能名 : { "data" : 功能自带的数据 } } } } } / of_base_sso_tool::user(); //已登录 返回详细数据 未登录 null
rolestring
验证权限的键值 推进使用 类名::方法@定位 的方式
spacestring
指定空间, 默认使用"default"或check设置的值
<?php of_base_sso_tool::role('testRole'); //有权true 无权false
funcstring
功能名
dataarray
对应功能的数据参数
spacestring
指定空间, 默认使用"default"或check设置的值
<?php /** 功能参数 : { "getUser" : 获取用户数据 { "user" : 要获取的用户 } "setUser" : 修改用户数据时 { "user" : 要修改的用户,可以按照 oAnswer oPwd space 三个任意条件修改数据 "space" : 按照当前用户修改数据 "oPwd" : 按照密码修改数据 "oAnswer" : 按照回答修改数据 "pwd" : 密码 "nick" : 昵称 "notes" : 用户备注 "state" : 可用状态,0=冻结,1=启用 "question" : 问题 "answer" : 回答 } "addUser" : 添加用户数据时 { "user" : 要添加的用户 "pwd" : 密码 "nick" : 昵称 "notes" : 用户备注 "state" : 可用状态,0=冻结,1=启用 "question" : 问题 "answer" : 回答 } } 返回结构 : { "getUser" : 获取用户数据 { "state" : 200 "name" : 用户名 "nick" : 昵称 "notes" : 用户备注 "question" : 问题 } "setUser" : 修改用户数据时 { "state" : 200 "msg" : 操作成功 } "addUser" : 添加用户数据时 { "state" : 200 "msg" : 操作成功 } } */ print_r(of_base_sso_tool::func('getUser',array( //获取用户找回信息 'user' => 'admin' )));
referer
登录成功后回调地址
space
一般 "default" 登录空间
name
域名帐号
role
获取权限(0=不获取权限, 1=拥有的权限, 2=没有的权限, 3=所有的权限)
check
校验信息(如: 当前SESSION的md5, 有此值返回数据将带有md5字段, 获取 role 必须的选项)
notify
回调路径(当 space 的帐号登录或退出时, 会调用此帐号通知回调)
cookie
一般为 session_name=session_id 作为 notify 回调时附带的 cookie
返回 : POST 数据 md5 : 校验摘要(name有效并且check存在时生成: md5(data + check + 域名密码) data : 响应 json 数据 { "state" : 200, "ticket" : 下次使用的票据, "msg" : 提示信息, "user" : 用户ID, 如果登录了存在 "name" : 用户名, 如果登录了存在 "nick" : 用户昵称, 如果登录了存在 "notes" : 用户备注, 如果登录了存在 "role" : 角色包, 如果登录了存在 { "deny" : 拒绝访问接口,当获取没有权限时存在 { "pack" : { "角色名" : { "data" : 角色自带的数据 "func" : {功能名1:功能名1,功能名2;功能名2...} } } "func" : { "功能名" : { "data" : 功能自带的数据 } } }, "allow" : 允许访问接口,当获取拥有权限时存在 { "pack" : { "角色名" : { "data" : 角色自带的数据 "func" : {功能名1:功能名1,功能名2;功能名2...} } } "func" : { "功能名" : { "data" : 功能自带的数据 } } } } }
referer
登录成果后回调地址
space
一般 "default" 登录空间
name
域名帐号
callback
一般 "callback" jsonp 回调 函数
space
一般 "default" 登录空间
name
域名帐号
返回js代码 callback({ "state" : 200, 200为成功 "ticket" : 下次使用的票据, "msg" : 提示信息, state 非 200 时存在 });
space
一般 "default" 登录空间
name
域名帐号
role
获取权限(0=不获取权限, 1=拥有的权限, 2=没有的权限, 3=所有的权限)
check
校验信息(如: 当前SESSION的md5, 有此值返回数据将带有md5字段, 获取 role 必须的选项)
notify
回调路径(当 space 的帐号登录或退出时, 会调用此帐号通知回调)
cookie
一般为 session_name=session_id 作为 notify 回调时附带的 cookie
user
登录帐号(同 pwd 一起, 登录 space 空间, 不填=检验当前帐号)
pwd
登录密码(同 user 一起, 登录 space 空间, 不填=检验当前帐号)
md5
校验摘要( md5(join(get参数) + 域名密码 ) )
返回json数据 { "state" : 200, "ticket" : 下次使用的票据, "msg" : 提示信息, "user" : 用户ID, 如果登录了存在 "name" : 用户名, 如果登录了存在 "nick" : 用户昵称, 如果登录了存在 "notes" : 用户备注, 如果登录了存在 "role" : 角色包, 如果登录了存在 { "deny" : 拒绝访问接口,当获取没有权限时存在 { "pack" : { "角色名" : { "data" : 角色自带的数据 "func" : {功能名1:功能名1,功能名2;功能名2...} } } "func" : { "功能名" : { "data" : 功能自带的数据 } } }, "allow" : 允许访问接口,当获取拥有权限时存在 { "pack" : { "角色名" : { "data" : 角色自带的数据 "func" : {功能名1:功能名1,功能名2;功能名2...} } } "func" : { "功能名" : { "data" : 功能自带的数据 } } } } }
space
一般 "default" 登录空间
name
域名帐号
md5
校验摘要( md5(join(get参数) + 域名密码 ) )
通用的返回结构为 { "state" : 200, 200为成功 "ticket" : 下次使用的票据, "msg" : 提示信息, state 非 200 时存在 }
space
一般 "default" 登录空间
name
域名帐号
user
找回的用户名
md5
校验摘要( md5(join(get参数) + 域名密码 ) )
space
一般 "default" 登录空间
name
域名帐号
user
要修改的用户,可以按照 oAnswer oPwd space 三个任意条件修改数据
oPwd
按照密码修改数据
oAnswer
按照回答修改数据
pwd
密码
nick
昵称
state
可用状态,0=冻结,1=启用
question
问题
md5
校验摘要( md5(join(get参数) + 域名密码 ) )
手册地址 http://phpof.net/
- 入门指引
-
疑难解答
- 部署时会遇到的那些常见问题
简单却容易忽视 - 框架内置有哪些管理界面
生产模式进入界面需用 __OF_DEBUG__ - 如何定制不同的架构模式
通过配置入口文件中调度方法的参数即可 - 如何面向命名空间开发
of_xx 类可以按照命名空间方式调用 - 如何设置不同的部署模式
通过_of.debug设置 开发,测试,生产 模式 - 为什么控制层类文件要返回true
这是防止非法访问的方法之一 - 为什么传到视图层的变量会被编码
这是因为 XSS 安全防范的原因 - 为什么框架没有SQL构造器
因常规方案牺牲了性能又未很好解决问题 - 如何快速开发用户及权限管理功能
单点登录(SSO)模块因此而存在 - 怎么在系统的基础上扩展底层功能
三点: 扩展开发, 预先加载, 底层钩子 - 怎么使用 Composer 依赖管理工具
框架已集成, 默认关闭状态
- 部署时会遇到的那些常见问题
- 组件使用
- 集成插件
- 扩展开发
- 开发手册