IdP4:5. 对接腾讯微校认证
CARSI IdP对接腾讯微校认证的步骤:
1. 以管理员身份登录微校并创建应用
登录地址:https://wecard.qq.com/ 或 https://weixiao.qq.com/。
1.1 登录成功后,如下图所示,点击”应用“ → "自建应用” -->“创建应用”:
1.2 输入自建应用信息,并点击提交
应用名称:CARSI资源共享
上传CARSI logo:
请将上述图片保存到本地电脑上,再上传到微校网站。
应用简介:CARSI资源共享
1.3 查看并记录App Key和App Secret值,稍后会用。
1.4 点击 “编辑” 应用信息,应用形态选择 ”无“
1.5 自建应用配置完毕后,请点击 ”开启应用“ 以激活自建应用
1.6 增加 ”业务域名“ 白名单
点击 ”应用“ → "自建应用” → CARSI资源共享下 ”应用管理“
如下图所示,点击接口调用凭证 ”编辑“
1.7 如下图所示,在业务域名处输入: 学校IdP服务器域名, 并点击完成保存。
2. IdP端配置腾讯微校对接参数
IdP与腾讯微校对接,需要appkey、appsecret、ocode三个参数,分别对应上面 “CARSI资源共享” 应用的 App Key、App Secret和学校code。
App Key和App Secret获取方式请查看上述步骤1.3 。
学校code,请以管理员身份登录微校,点击 “配置” → "基本配置“,即可查看。
[carsi@www ~]$ sudo vi /opt/shibboleth-idp/conf/authn/authn.properties #将第85行配置由external.jsp修改为/Authn/External: idp.authn.External.externalAuthnPath = contextRelative:/Authn/External #新增下面配置项,其中serverName中的{IDP_DNS}替换为IdP域名;appkey替换为应用的Appkey,appsecret替换为应用的AppSecret,ocode替换为学校的code。 # Weixiao properties idp.authn.flows = External shibcarsi.serverName = https://{IDP_DNS} shibcarsi.weixiao.appkey = [1234567890123456] shibcarsi.weixiao.appsecret = [abcdefghijklmnopqrstuvwxyz123456] shibcarsi.weixiao.ocode = [1234567890] shibcarsi.weixiao.oauth2LoginUrl = https://open.wecard.qq.com/connect/oauth/pc-authorize?app_key=${shibcarsi.weixiao.appkey}&response_type=code&ocode=${shibcarsi.weixiao.ocode}&scope=snsapi_userinfo&state=STATE&connect=curLogin shibcarsi.weixiao.oauth2LoginUrlh5 = https://open.wecard.qq.com/connect/oauth/authorize?app_key=${shibcarsi.weixiao.appkey}&response_type=code&ocode=${shibcarsi.weixiao.ocode}&scope=snsapi_userinfo&state=STATE shibcarsi.weixiao.oauth2TokenUrl = https://open.wecard.qq.com/connect/oauth2/token shibcarsi.weixiao.oauth2ResourceUrl = https://open.wecard.qq.com/connect/oauth/get-user-info shibcarsi.weixiao.identityTypeUrl = https://open.wecard.qq.com/cgi-bin/user/get-identity-type shibcarsi.weixiao.oauth2clientid = ${shibcarsi.weixiao.appkey} shibcarsi.weixiao.oauth2clientsecret = ${shibcarsi.weixiao.appsecret}
3. IdP端,配置属性定义
eduPersonScopedAffiliation属性,取值为用户在学校的身份,“identity_type”为腾讯微校中确定用户身份的属性名称。关于身份属性取值,需要将腾讯微校中用户身份的取值,对应到CARSI联盟标准取值,包括:faculty(教师),student(学生),staff(教工),employee(雇员),member(各类人员,包括faculty、student、staff、employee),alum(校友),affiliate(附属人员或临聘,常用),other(CARSI补充,不建议优先使用)。下文样例,将所有的本地用户区分为“faculty”、“student”、“member”三种身份。学校可根据微校实际部署情况选取其中的一部分值。不同SP对用户身份的要求不同,建议配置时尽可能细化用户身份分类,避免后期修改配置。
注:
1、 IdP根据微校配置中用户 “身份” 生成用户的身份属性,请学校修改下面的 if-else 身份判断语句,根据本校实际情况进行增删及修改;
2、 其它配置不需要修改;
3、 为支持IdP使用微校做为认证源,我们开发了相应的插件,可以访问https://github.com/carsi-pku/shib-carsi-weixiao了解更多信息。
[carsi@www ~]$ sudo vi /opt/shibboleth-idp/conf/attribute-resolver.xml <AttributeDefinition xsi:type="ScriptedAttribute" id="eduPersonScopedAffiliation"> <InputAttributeDefinition ref="employee_type" /> <Script><![CDATA[ scopedValueType = Java.type("net.shibboleth.idp.attribute.ScopedStringAttributeValue"); var localpart = ""; if(typeof(employee_type)=="undefined"){ localpart = "member"; }else{ if(employee_type.getValues().get(0)=="学生") localpart = "student"; else if(employee_type.getValues().get(0)=="教师") localpart = "faculty"; else if(employee_type.getValues().get(0)=="教职工") localpart = "staff"; else localpart = "member"; } eduPersonScopedAffiliation.addValue(new scopedValueType(localpart, "%{idp.scope}")); ]]></Script> </AttributeDefinition> <AttributeDefinition xsi:type="SubjectDerivedAttribute" id="employee_type" principalAttributeName="identity_type"></AttributeDefinition> [carsi@www ~]$ sudo systemctl restart jetty
版权所有©北京大学计算中心