一、前言
总体上是网上的资料太过功利主义,窥一斑而不知全身。让人理解的比较困难,其实是一个很正常的对接方式,由于资料的杂乱导致了学习成本的飙升,是不应该的。也为了不让自己再次踩坑,markdown!!
大概使用两个章节来描述
章节一: 了解基本概念和对应对接模式及其方案简要
SAML2.0 笔记(一)
章节二: 基于java 代码以示例形式讲演三种基本工作模式及中途可能遇到的错误总结
SAML2.0 笔记(二)
二、初识概念
整体上是运用证书公私钥加密解密对数据和传输过程内容加密的一个方式,我运用到的当下仅有SSO。
1、SP & IDP 的概念
-
Service Provider(SP): 向用户提供正式商业服务的实体,通常需要认证一个用户的身份;
真正提供服务的 实体,比如提供交互,提供业务接口
-
Identity Provider(IDP): 提供用户的身份鉴别,确保用户是其所声明的身份;
类似于鉴权授权服务去理解就好了
2、认识元数据
生成IDP元数据
: https://www.samltool.com/idp_metadata.php
生成SP元数据
: https://www.samltool.com/sp_metadata.php
示例基于本地环境,所以以本地ip+私有证书为组合以作为说明
2.1 IDP MetaData
下列是依据
目录2.4证书
形成的基础元数据
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2022-06-23T02:54:04Z" cacheDuration="PT1656384844S" entityID="https://coffeeandice/demo/idp">
<md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>MIICYjCCAcugAwIBAgIBADANBgkqhkiG9w0BAQ0FADBOMQswCQYDVQQGEwJ1czESMBAGA1UECAwJR3Vhbmdkb25nMRQwEgYDVQQKDAtkZWxheW5vbW9yZTEVMBMGA1UEAwwMY29mZmVlYW5kaWNlMB4XDTIyMDYyMTAyMzgxNloXDTIzMDYyMTAyMzgxNlowTjELMAkGA1UEBhMCdXMxEjAQBgNVBAgMCUd1YW5nZG9uZzEUMBIGA1UECgwLZGVsYXlub21vcmUxFTATBgNVBAMMDGNvZmZlZWFuZGljZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7f1NEx2PSPlwU0GCAUFIeUq3WRKRaRQwlprKJ1STRuC54v9SlG404H1vI5JNRYOZ1wmMPh2YuCuWQW0VrJqOJTMXGvXpKzktYUzCB+LhcSGpe2SLheaivb/npkb73Kh9XbdtHVTK7a1rZySo0QovCresVnpxiPbZiazHEsMET3cCAwEAAaNQME4wHQYDVR0OBBYEFBjIdQPNJGwwpG5txEz8U9PGVHX7MB8GA1UdIwQYMBaAFBjIdQPNJGwwpG5txEz8U9PGVHX7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADgYEAQEpTrrbdyZ8RBDWBQ3HKDzmF23VhXk/6SR3kUNy4qGkP0i/M9iujVvoOG7yEuZb1d178HrZjG/x7mQsXSAS3DzBwOrZKuUq5s8fdxtG93VgkeSKkN9nyaC7WkePNR25CN5PY8v1SblY0aIfdCEbdMBW6G/QLQjVI726UVhqBvMI=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>MIICYjCCAcugAwIBAgIBADANBgkqhkiG9w0BAQ0FADBOMQswCQYDVQQGEwJ1czESMBAGA1UECAwJR3Vhbmdkb25nMRQwEgYDVQQKDAtkZWxheW5vbW9yZTEVMBMGA1UEAwwMY29mZmVlYW5kaWNlMB4XDTIyMDYyMTAyMzgxNloXDTIzMDYyMTAyMzgxNlowTjELMAkGA1UEBhMCdXMxEjAQBgNVBAgMCUd1YW5nZG9uZzEUMBIGA1UECgwLZGVsYXlub21vcmUxFTATBgNVBAMMDGNvZmZlZWFuZGljZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7f1NEx2PSPlwU0GCAUFIeUq3WRKRaRQwlprKJ1STRuC54v9SlG404H1vI5JNRYOZ1wmMPh2YuCuWQW0VrJqOJTMXGvXpKzktYUzCB+LhcSGpe2SLheaivb/npkb73Kh9XbdtHVTK7a1rZySo0QovCresVnpxiPbZiazHEsMET3cCAwEAAaNQME4wHQYDVR0OBBYEFBjIdQPNJGwwpG5txEz8U9PGVHX7MB8GA1UdIwQYMBaAFBjIdQPNJGwwpG5txEz8U9PGVHX7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADgYEAQEpTrrbdyZ8RBDWBQ3HKDzmF23VhXk/6SR3kUNy4qGkP0i/M9iujVvoOG7yEuZb1d178HrZjG/x7mQsXSAS3DzBwOrZKuUq5s8fdxtG93VgkeSKkN9nyaC7WkePNR25CN5PY8v1SblY0aIfdCEbdMBW6G/QLQjVI726UVhqBvMI=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/idp/sso/"/>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/idp/sso/"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>
2.1.1 SingleLogoutService
顾名思义登出端点,通常可以考虑点
Location对应url为'/'结尾
:
对应请求地址:https://coffeeandice/idp/sso/SingleLogoutService
Location对应url非'/'结尾:
对应请求地址:https://coffeeandice/idp/sso/logout
<!-- 以'/'结尾 -->
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/idp/sso/"/>
<!-- 非'/'结尾 -->
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/idp/sso/logout"/>
2.1.2 SingleSignOnService
顾名思义登入端点,通常可以考虑点
Location对应url为'/'结尾
:
对应请求地址:https://coffeeandice/idp/sso/SingleSignOnService
Location对应url非'/'结尾:
对应请求地址:https://coffeeandice/idp/sso/signon
<!-- 以'/'结尾 -->
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/idp/sso/"/>
<!-- 非'/'结尾 -->
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/idp/sso/signon"/>
2.2 SP MetaData
下列是依据
目录2.4证书
形成的基础元数据
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2022-06-23T05:49:54Z" cacheDuration="PT604800S" entityID="https://coffeeandice/demo/sp">
<md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>MIICYjCCAcugAwIBAgIBADANBgkqhkiG9w0BAQ0FADBOMQswCQYDVQQGEwJ1czESMBAGA1UECAwJR3Vhbmdkb25nMRQwEgYDVQQKDAtkZWxheW5vbW9yZTEVMBMGA1UEAwwMY29mZmVlYW5kaWNlMB4XDTIyMDYyMTAyMzgxNloXDTIzMDYyMTAyMzgxNlowTjELMAkGA1UEBhMCdXMxEjAQBgNVBAgMCUd1YW5nZG9uZzEUMBIGA1UECgwLZGVsYXlub21vcmUxFTATBgNVBAMMDGNvZmZlZWFuZGljZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7f1NEx2PSPlwU0GCAUFIeUq3WRKRaRQwlprKJ1STRuC54v9SlG404H1vI5JNRYOZ1wmMPh2YuCuWQW0VrJqOJTMXGvXpKzktYUzCB+LhcSGpe2SLheaivb/npkb73Kh9XbdtHVTK7a1rZySo0QovCresVnpxiPbZiazHEsMET3cCAwEAAaNQME4wHQYDVR0OBBYEFBjIdQPNJGwwpG5txEz8U9PGVHX7MB8GA1UdIwQYMBaAFBjIdQPNJGwwpG5txEz8U9PGVHX7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADgYEAQEpTrrbdyZ8RBDWBQ3HKDzmF23VhXk/6SR3kUNy4qGkP0i/M9iujVvoOG7yEuZb1d178HrZjG/x7mQsXSAS3DzBwOrZKuUq5s8fdxtG93VgkeSKkN9nyaC7WkePNR25CN5PY8v1SblY0aIfdCEbdMBW6G/QLQjVI726UVhqBvMI=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>MIICYjCCAcugAwIBAgIBADANBgkqhkiG9w0BAQ0FADBOMQswCQYDVQQGEwJ1czESMBAGA1UECAwJR3Vhbmdkb25nMRQwEgYDVQQKDAtkZWxheW5vbW9yZTEVMBMGA1UEAwwMY29mZmVlYW5kaWNlMB4XDTIyMDYyMTAyMzgxNloXDTIzMDYyMTAyMzgxNlowTjELMAkGA1UEBhMCdXMxEjAQBgNVBAgMCUd1YW5nZG9uZzEUMBIGA1UECgwLZGVsYXlub21vcmUxFTATBgNVBAMMDGNvZmZlZWFuZGljZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7f1NEx2PSPlwU0GCAUFIeUq3WRKRaRQwlprKJ1STRuC54v9SlG404H1vI5JNRYOZ1wmMPh2YuCuWQW0VrJqOJTMXGvXpKzktYUzCB+LhcSGpe2SLheaivb/npkb73Kh9XbdtHVTK7a1rZySo0QovCresVnpxiPbZiazHEsMET3cCAwEAAaNQME4wHQYDVR0OBBYEFBjIdQPNJGwwpG5txEz8U9PGVHX7MB8GA1UdIwQYMBaAFBjIdQPNJGwwpG5txEz8U9PGVHX7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADgYEAQEpTrrbdyZ8RBDWBQ3HKDzmF23VhXk/6SR3kUNy4qGkP0i/M9iujVvoOG7yEuZb1d178HrZjG/x7mQsXSAS3DzBwOrZKuUq5s8fdxtG93VgkeSKkN9nyaC7WkePNR25CN5PY8v1SblY0aIfdCEbdMBW6G/QLQjVI726UVhqBvMI=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/sp/logout"/>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://coffeeandice/sp/consumer" index="1"/>
</md:SPSSODescriptor>
</md:EntityDescriptor>
2.2.1 SingleLogoutService
顾名思义登出端点,通常可以考虑点
Location对应url为'/'结尾
:
对应请求地址:https://coffeeandice/sp/SingleLogoutService
Location对应url非'/'结尾:
对应请求地址:https://coffeeandice/sp/logout
此处与IDP不一样的是
实际上是我们调用了IDP的退出登录地址,然后IDP才通知我们的退出登录端点
<!-- 以'/'结尾 -->
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/sp/"/>
<!-- 非'/'结尾 -->
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/sp/logout"/>
2.2.2 AssertionConsumerService
响应端点,通常为传递登录SSO后的响应地址,用于SP判断登录的状态响应。
Tips: 在artifact 模式
下,还需要等候发送ArtifactResolve
以获取响应讯息
Location对应
url为'/'结尾
:
对应请求地址:https://coffeeandice/sp/SingleLogoutService
Location对应url非'/'结尾:
对应请求地址:https://coffeeandice/sp/consumer
<!-- 以'/'结尾 -->
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/sp/"/>
<!-- 非'/'结尾 -->
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://coffeeandice/sp/consumer"/>
2.3 通用节点
2.3.1 EntityId
示例:
https://coffeeandice/demo/trust
整体上要求是需要http 或https开头,并不需要可访问性,只作为唯一识别标识存在
推荐格式:
1、能以https 相对规范,虽然没有强制必要
2、仅用域名加目录形式,建议为了区分sp和idp,示例中trust可以变更为sp或idp
3、后缀无需再以’/'结尾
其他推荐: https://spaces.at.internet2.edu/display/federation/saml-metadata-entityid
2.3.2 KeyDescriptor
这里指的是用于校验时加密解密的证书,对应use分别会以
signing
及encryption
说明。
其值通常对应2.4.2 cert
,用于加密对比值,当IDP开启WantAuthnRequestsSigned
配置后。
若IDP/SP开启WantAuthnRequestsSigned
配置设置为true
则元数据通常会多出dom元素 ds:DigestValue
及ds:SignatureValue
2.3.3 NameIDFormat
针对
NameIDPolicy
,用于交互时可以支持返回的校验主题。一般是SP元数据与IDP元数据共同支持的任一则
NameID` 策略。通常常用存在8种模式:(大多数情况我们只需要1、2、3即可)
1、未定义模式:Unspecified
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
2、邮箱地址模式:Email Address
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
3、证书中subject 名称模式:X.509 Subject Name
urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName
4、windows域名模式:Windows Domain Qualified Name
urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName
5、Kerberos 主体名称模式:Kerberos Principal Name
urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos
6、实体标识符模式(通常指代entityid):Entity Identifier
urn:oasis:names:tc:SAML:2.0:nameid-format:entity
7、持久化标识符模式:Persistent Identifier
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
8、临时标识符模式:Transient Identifier
urn:oasis:names:tc:SAML:2.0:nameid-format:transient
2.4 示例采用证书
2.4.1 private key
# private key
-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAO39TRMdj0j5cFNB
ggFBSHlKt1kSkWkUMJaayidUk0bgueL/UpRuNOB9byOSTUWDmdcJjD4dmLgrlkFt
FayajiUzFxr16Ss5LWFMwgfi4XEhqXtki4Xmor2/56ZG+9yofV23bR1Uyu2ta2ck
qNEKLwq3rFZ6cYj22YmsxxLDBE93AgMBAAECgYAHUTVwdAU2yiyQ8r+riDVRPWHb
xD1iTLOdvc6fXPNWR4yPlSgV1jmb+V9UaagkjgJJ4UpFkqVibDyncFItR2c9YGFw
wj2iEBnSc3fK8tcysRhb2zzjqP0DYRWusrxlqkx+yVQcIVSgNA3J7SqWsKuu6Vbh
54QEQGqwgz1JgUSMSQJBAPtyXNEP3K+O2g8ja3xtkeNhcrDDKRLBIhDmrmxWZJJ9
i9F3bh/OeN5dJhx5qibEGFrvYZWAqn8l14cEK3CiWiMCQQDyTI3oEg7rttnpWzkY
jdlco6Qh1npRcgOYgjPk7NGQ1WAWH63A5WSWZMaQcLn525BHa52P9NZIERWia4cT
nVidAkA7NE9Ebm6w63rOi7F4R7hNCJnfouQd5VmnDxnMqn7duy/brzo/xPbSrK4X
kFIO9Kcjai/Y6sW6UGeyA7pSt/dvAkAtUNYFfkMeIJ+WvkHqbrUlV1GeJn/P9bPo
dQmBmi0DmnSTDq+vcPekDQr5/qs5qK/OO7lHMDJXXiKest+bcoUdAkB8pV+HuKHi
YXkE1tgb4jSN0fxEVikidp05RF3FVOFqvS3DvIIEtQtvfIduQ4nAY28+iy1st/lZ
Dp7VsGJjTQnz
-----END PRIVATE KEY-----
2.4.2 x509.cert (通常意义上的证书)
# x509.cert
-----BEGIN CERTIFICATE-----
MIICYjCCAcugAwIBAgIBADANBgkqhkiG9w0BAQ0FADBOMQswCQYDVQQGEwJ1czES
MBAGA1UECAwJR3Vhbmdkb25nMRQwEgYDVQQKDAtkZWxheW5vbW9yZTEVMBMGA1UE
AwwMY29mZmVlYW5kaWNlMB4XDTIyMDYyMTAyMzgxNloXDTIzMDYyMTAyMzgxNlow
TjELMAkGA1UEBhMCdXMxEjAQBgNVBAgMCUd1YW5nZG9uZzEUMBIGA1UECgwLZGVs
YXlub21vcmUxFTATBgNVBAMMDGNvZmZlZWFuZGljZTCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEA7f1NEx2PSPlwU0GCAUFIeUq3WRKRaRQwlprKJ1STRuC54v9S
lG404H1vI5JNRYOZ1wmMPh2YuCuWQW0VrJqOJTMXGvXpKzktYUzCB+LhcSGpe2SL
heaivb/npkb73Kh9XbdtHVTK7a1rZySo0QovCresVnpxiPbZiazHEsMET3cCAwEA
AaNQME4wHQYDVR0OBBYEFBjIdQPNJGwwpG5txEz8U9PGVHX7MB8GA1UdIwQYMBaA
FBjIdQPNJGwwpG5txEz8U9PGVHX7MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEN
BQADgYEAQEpTrrbdyZ8RBDWBQ3HKDzmF23VhXk/6SR3kUNy4qGkP0i/M9iujVvoO
G7yEuZb1d178HrZjG/x7mQsXSAS3DzBwOrZKuUq5s8fdxtG93VgkeSKkN9nyaC7W
kePNR25CN5PY8v1SblY0aIfdCEbdMBW6G/QLQjVI726UVhqBvMI=
-----END CERTIFICATE-----
2.4.3 CSR
-----BEGIN CERTIFICATE REQUEST-----
MIIBjTCB9wIBADBOMQswCQYDVQQGEwJ1czESMBAGA1UECAwJR3Vhbmdkb25nMRQw
EgYDVQQKDAtkZWxheW5vbW9yZTEVMBMGA1UEAwwMY29mZmVlYW5kaWNlMIGfMA0G
CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt/U0THY9I+XBTQYIBQUh5SrdZEpFpFDCW
msonVJNG4Lni/1KUbjTgfW8jkk1Fg5nXCYw+HZi4K5ZBbRWsmo4lMxca9ekrOS1h
TMIH4uFxIal7ZIuF5qK9v+emRvvcqH1dt20dVMrtrWtnJKjRCi8Kt6xWenGI9tmJ
rMcSwwRPdwIDAQABoAAwDQYJKoZIhvcNAQENBQADgYEAZSuIubccAOLVf99u7Djo
K5glaXRo9TMl6EOaVlJLWf07s+FrtDwJr9g/SuYssXptpnzhETg6yQIMpubHxkuz
JFFA/GUeN+WOC9BXPKR1HE5CyxKTLYFhzmTcZ4yXh0b32COrQgeP8xEYz4Cmvt1z
ontjVJM5FdrvpdqP2AAn2DI=
-----END CERTIFICATE REQUEST-----
3、常用工作模式
3.1 SP redirect 模式 + IDP post响应模式
整体上:账户讯息都由IDP掌控,减少了SP可能掌握信息的可能性
对应文章定位:SAML2.0 笔记(二)#SP redirect 模式 + IDP post响应模式
SP首先判断用户是否存在登录标识符
①存在: 直接读取标识符登入
②不存在:
Step 1
:基于SP元数据
生成SP方的SAMLRequest 内容,用于重定向到IDP的SSO登录地址,等待IDP重定向到其登录介面
Step 2
: 登录授权确定后,基于SP元数据
利用post方式返回 SAMLResponse内容响应结果
3.2 SP post 模式 + IDP post 模式
整体上:相对信任SP方,存在泄露信息的可能性
SP也是判断用户是否存在登录标识符
①存在:直接读取标识符登入
②不存在:
Step 1
:SP 可以定义登录介面,用于客户登录,然后将表单连同内容发送给 IDP
Setp 2
: 登录授权确定后,基于SP元数据
利用post方式返回 SAMLResponse内容响应结果
3.3 SP redirect artifact + IDP redirect artifact
整体上:与第一种方式相似,但传输讯息的方式通常采用soap,更为安全(也可以不用),需要开启 artifact service 服务
SP还是判断用户是否存在登录标识符
①存在:直接读取标识符登入
②不存在:
Step 1
:基于SP元数据
生成SP方的SAMLRequest 内容,用于重定向到IDP的SSO登录地址,等待IDP重定向到其登录介面
Step 2
:登录授权后,IDP 利用 redirect 方式传递artifact 给SP
Step 3
:SP 接受到artifact 后组合拼接一个ArtifactResolve
向IDP元数据
中定义的artifact service
端点发送请求,等待返回ArtifactResponse
三、其他内容讯息
1、OpenSAML选取版本问题
由于OpenSAML 4.0只支持JDK11,使用3.x版本即为JDK 8 最终解。
2、为什么要选取OpenSAML
我们不必重新造一次轮子,使用
OpenSaml
可以方便我们对SAML协议的大部分内容,基础的 第三种对接模式最起码是支持的。
3、MetaData 中密钥对生成建议
3.1 建议使用域名DV
也可以使用OV客户端,具体情况可以参考客户情况(因为自签名证书的issuer和signature基本是一致的)
3.2 密钥长度选择(2048)
建议使用2048,实际上1024是不安全的,同时若需要使用到代理(例如nginx等),则1024是不会被openssl允许通过
4、对接前置内容
对应证书生成的jks 理应由IDP提供
或
SP方自行生成后提供 cert证书给IDP方