IdP4:5. 对接腾讯微校认证

CARSI IdP对接腾讯微校认证的步骤:

1. 以管理员身份登录微校并创建应用

登录地址:https://wecard.qq.com/https://weixiao.qq.com/

1.1 登录成功后,如下图所示,点击”应用“ → "自建应用” -->“创建应用”:

1.2 输入自建应用信息,并点击提交

应用名称:CARSI资源共享

上传CARSI logo:

https://carsi.atlassian.net/wiki/download/thumbnails/27104195/carsi%20logo500%E5%83%8F%E7%B4%A0.png?version=1&modificationDate=1630650282112&cacheVersion=1&api=v2&width=150&height=150

请将上述图片保存到本地电脑上,再上传到微校网站。

应用简介: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

版权所有©北京大学计算中心