SAML2.0 笔记(一)

一、前言

总体上是网上的资料太过功利主义,窥一斑而不知全身。让人理解的比较困难,其实是一个很正常的对接方式,由于资料的杂乱导致了学习成本的飙升,是不应该的。也为了不让自己再次踩坑,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分别会以signingencryption 说明。
其值通常对应 2.4.2 cert ,用于加密对比值,当IDP开启WantAuthnRequestsSigned 配置后。

若IDP/SP开启WantAuthnRequestsSigned 配置设置为true
则元数据通常会多出dom元素 ds:DigestValueds: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方

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Spring SAML是Spring Boot框架中的一个集成模块,用于支持基于SAML(Security Assertion Markup Language)的单点登录(Single Sign-On)功能。SAML是一种基于XML的开放式标准,用于在不同的安全域之间进行身份验证和授权。通过使用Spring Boot SAML模块,我们可以轻松地实现SAML单点登录的功能。 在Spring Boot中,我们可以使用一些核心注解来启用和配置Spring Boot SAML模块。首先,我们使用@SpringBootApplication注解来标识我们的应用程序为一个Spring Boot应用程序。@SpringBootApplication注解是一个复合注解,包含了@ComponentScan、@EnableAutoConfiguration和@SpringBootApplication注解。 @ComponentScan注解用于指定要扫描的组件的基本包路径。通过使用@ComponentScan注解,我们可以告诉Spring Boot在哪些包及其子包中查找bean,并将它们注册到Spring IOC容器中。 @EnableAutoConfiguration注解用于启用Spring Boot的自动配置功能。Spring Boot的自动配置功能可以根据依赖关系和配置文件的内容来自动配置应用程序所需的组件和功能。在使用@EnableAutoConfiguration注解后,Spring Boot将自动为我们配置各种SAML相关的组件和功能,从而简化了配置过程。 此外,我们还可以使用@SpringBootConfiguration注解来标识一个类为Spring Boot的配置类。Spring Boot的配置类可以包含各种配置信息,例如:数据源配置、Bean的定义等。通过使用@SpringBootConfiguration注解,我们可以将某个类标识为配置类,并在其中配置Spring Boot SAML相关的组件和功能。 综上所述,通过使用@SpringBootApplication、@ComponentScan、@EnableAutoConfiguration和@SpringBootConfiguration这些注解,我们可以启用和配置Spring Boot SAML模块,并实现SAML单点登录的功能。这些注解使得配置变得简单,并且可以快速开发具有强大功能的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值