shibboleth SP

SP(service provider)加入IDP步驟如下
1SP設定部份:安裝和設定SP,iis和apache有不同方法
2IDP設定部份:設定IDP加入SP

##########################################################################

SP設定部份

…………………………………………………………………………………………

SP on IIS 

IIS6前置作業
1
網頁標頭值與IP位置需先設定
ex: 內容>網站>IP位置,及進階>編輯主機標頭值
2
啟用ssl


…….
安裝

1
根據安裝檔來源選擇適合的安裝
https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPWindowsInstall
ps:
預設安裝路徑 C:optshibboleth-sp
安裝完後會重開機

2
測試
在IIS的ISAPI Filters會多shibboleth 
啟動shibboleth
檢查sp metedata,位置在http:///Shibboleth.sso/Metadata

………………

組態
編輯shibboleth2.xml

part1
1
設定site id
< Site id=”< site id>” name=”< 主機標頭值>” port=”443″>
說明如下
< site id> iis各site的識別元
< 主機標頭值> iis各site的主機標頭值
ex:
< Site id=”5″ name=”spiis.systw.net” port=”443″>
PS:
site id可參考https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPISAPI

2
設定要驗證的目錄
< Host name=”<主機標頭值>“>
     < Path name=”< 要驗證的目錄>” authType=”shibboleth” requireSession=”true”/>
< /Host>
ex:
< Host name=”spiis.systw.net”>
 < Path name=”secure” authType=”shibboleth” requireSession=”true”/>
< /Host>

part2
調整ApplicationDefaults區段
1
設定entity id,
An “https://hostname/shibboleth” is recommended
< ApplicationDefaults entityID=”https://hostname/shibboleth
REMOTE_USER=”eppn persistent-id targeted-id”>
ex:
< ApplicationDefaults entityID=”https://spiis.systw.net/shibboleth”
REMOTE_USER=”eppn persistent-id targeted-id”>

2
(optional)設定session
< Sessions lifetime=”28800″ timeout=”3600″ checkAddress=”false”
handlerURL=”/Shibboleth.sso” handlerSSL=”true” cookieProps=”; path=/; secure”
exportLocation=”http://localhost/Shibboleth.sso/GetAssertion” exportACL=”127.0.0.1″
idpHistory=”false” idpHistoryDays=”7″>

3
定義讀取metadata來源
假如metadata放在本地時設定如下
< MetadataProvider type=”XML” file=”/opt/installfest/idps/idp#/idp#-metadata.xml” />
ps:
假如metadata放在遠端時設定如下
< MetadataProvider type=”XML” uri=”http://admin.example.org/downloads/ShibTrain1-metadata.xml”
backingFilePath=”ShibTrain1-metadata.xml” reloadInterval=”7200″>
< /MetadataProvider>

4
定義sessioninitiator
< SSO entityID=”https://testidp.example.org/idp/shibboleth“>
SAML2 SAML1
< /SSO>

ps:
需注意以下兩點,否則IIS會出現錯誤
1
檢查shibboleth.xml正確性
可使用指令 %SHIBSP_PREFIX%/sbin/shibd.exe -check
2
需注意到iis要有可讀取%SHIBSP_PREFIX%/lib/的權限

ps:
設定方法概要
https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPIISConfig

……………………………………………………………………………………………. 

SP on Apache 

apache前置作業 
1
#vi httpd.conf以下資料
UseCanonicalName On
ServerName < YourAssignedHostname>:80
ps:
2
啟用ssl

安裝
安裝shib module
https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPLinuxRPMInstall

1
設定yum
在目錄/etc/yum.repos.d.內新增shib.repo檔案,並包含以下shibboleth的yum組態設定
[security_shibboleth]
name=Shibboleth (CentOS_5)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/security:/shibboleth/CentOS_5/
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/security:/shibboleth/CentOS_5/repodata/repomd.xml.key
enabled=1
ps:
以上組態設定來自
http://download.opensuse.org/repositories/security://shibboleth/CentOS_5/security:shibboleth.repo

2
以yum安裝
#yum install shibboleth
安裝完後有以下資料
/usr/sbin/shibd #啟動檔
/usr/lib/shibboleth/mod_shib #模組存放處
/etc/shibboleth/ #組態檔放置處
/etc/httpd/conf.d/shib.conf #apache組態
/etc/shibboleth/native.logger #設定log運作
/var/log/shibboleth #主要要的log目錄
/var/log/shibboleth/shibd.log #啟動後會自己產生,找問題先看該檔/var/log/httpd/native.log #log檔,因權限問題預設沒檔案

3
restart service
重開apache(務必確認apache有ssl)
#service httpd restart
啟動shib
#/sbin/service shibd start

4
測試
於sp本機上開啟以下網址
https://localhost/Shibboleth.sso/Status
ps:
開啟位置被限制在/etc/shibboleth/shibboleth2.xml內的
< Handler type=”Status” Location=”/Status” acl=”127.0.0.1″/>


組態 
編輯shibboleth2.xml
/etc/shibboleth/shibboleth2.xml

調整ApplicationDefaults區段
1
設定entity id,
An “https://hostname/shibboleth” is recommended
< ApplicationDefaults entityID=”https://hostname/shibboleth
REMOTE_USER=”eppn persistent-id targeted-id”>
2
(optional)設定session
< Sessions lifetime=”28800″ timeout=”3600″ checkAddress=”false”
handlerURL=”/Shibboleth.sso” handlerSSL=”true” cookieProps=”; path=/; secure”
exportLocation=”http://localhost/Shibboleth.sso/GetAssertion” exportACL=”127.0.0.1″
idpHistory=”false” idpHistoryDays=”7″>
3
定義讀取metadata來源
metadata放在本地時
< MetadataProvider type=”XML” file=”/opt/installfest/idps/idp#/idp#-metadata.xml” />
ps:
metadata放在遠端時
< MetadataProvider type=”XML” uri=”http://admin.example.org/downloads/ShibTrain1-metadata.xml”
backingFilePath=”ShibTrain1-metadata.xml” reloadInterval=”7200″>
< /MetadataProvider>
4
定義sessioninitiator
< SSO entityID=”https://testidp.example.org/idp/shibboleth“>
SAML2 SAML1
< /SSO>

(optional)
編輯attribute-map.xml
/etc/shibboleth/attribute-map.xml
調整attribute
可讀取idp得到的使用者資料,預設是不和idp要
ex:
< Attribute name=”urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified” id=”uid”/>
ps:
可參考
https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPAttributeExtractor

最後檢查
1檢查組態檔是否有錯誤
#/usr/sbin/shibd -t
2重啟web server和shibd
#service httpd restart
#service shibd restart
3確認Status是否正常
https://localhost/Shibboleth.sso/Status

#####################################################################

IDP設定部份


讓idp可讀取sp的metadata
sp的metadata在https://< sp url>/Shibboleth.sso/Metadata
ex:
從idp取得sp的metadata
curl -o Metadata.xml -k https://< YourAssignedHostname>/Shibboleth.sso/Metadata

讓idp以讀取本地檔方式指定metadata位置
1
取得metadata
將該metadata放在/opt/shibboleth-idp/metadata並命名為sp.metadata.xml
2
加入relying-party.xml,
設定如下
#vi /opt/shibboleth-idp/conf/relying-party.xml
加入以下區段
< RelyingParty id=”https://spurl/shibboleth
provider=”https://idpurl/shibboleth
defaultSigningCredentialRef=”IdPCredential”>
< ProfileConfiguration xsi:type=”saml:SAML2SSOProfile” encryptAssertions=”never” encryptNameIds=”never” />
< /RelyingParty>
加入以下區段
< MetadataProvider id=”sptest” xsi:type=”FilesystemMetadataProvider” xmlns=”urn:mace:shibboleth:2.0:metadata”
metadataFile=”/opt/shibboleth-idp/metadata/sp.metadata.xml” />
ps:此id不可和其他的重覆,需使用該sp之metadata內的entityID

#####################################################################

其他補充 

使用aacli檢查attribute
該工具會檢查resolver,filters,metadata
執行bin/aacli.sh –configDir=conf/ –principal=principal
設定正確會出現
< ?xml version=”1.0″ encoding=”UTF-8″?>< saml2:AttributeStatement xmlns:saml2=”urn:oasis:names:tc:SAML:2.0:assertion”>
< saml2:Attribute Name=”attri1″ NameFormat=”urn:oasis:names:tc:SAML:2.0:attrname-format:uri”>
< saml2:AttributeValue xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:type=”xs:string”>principal
< /saml2:Attribute>
< /saml2:AttributeStatement>
失敗會出現
No attribute statement.