背景

某客户内部销售系统支持和ADFS(Active Directory Federation Services)单点登录集成,但客户内部系统都是通过Oracle OAM进行单点登录,因此需要实现ADFS和OAM的单点登录集成。

预备知识

SAML 2.0

SAML是一种实现单点登录的协议,最新的版本是2.0,SAML协议细节部分十分复杂,但过程很简单,我们没必要去深究协议细节,只要清楚过程是怎么就行,在SAML里,作为认证服务器被称做IDP(Identity Provider),提供用户服务的叫做SP(Service Providers),单点登录过程如下:

总结就是以下步骤:

  • sp和idp双方配好信任关系(登录地址,签名证书,解密证书)
  • 应用程序(sp)带着应用程序信息跳转到认证中心idp
  • idp提供登录页面,用户进行登录
  • 登录成功后idp将用户信息加密并以Form的形式在浏览器端提交到sp的回调页
  • 应用程序使用idp的公钥进行解密,如果成功则完成认证

sp和idp的数据交互都是通过表单的形式进行交互,也就是sp提交一个表单给idp,表单的内容是应用信息,idp认证成功后跳回到sp的表单内容是用户信息,理解这点很重要。

方案

因为业务场景是ADFS跳转到OAM进行认证,因此ADFS是sp,OAM是idp,销售系统和ADFS集成,跳转到ADFS登录页,在ADFS登录页选择OAM进行认证,跳转到OAM登录页进行登录认证,认证成功后回到ADFS登录成功页面,ADFS重定向到销售服务系统。

OAM配置

  • 1.登录oamconsole,进入配置->可用服务,开启Identity Federation服务
  • 2.进入配置->设置->Access Manager
  • 3.开启https
OAM Server Host: 如果有OHS代理,这里填的是OHS的访问路径
OAM Server Port:https的访问端口,如果有OHS代理,这里填的是OHS的https端口
OAM Server Protocol:开启https
  • 4.进入联盟->身份提供方管理,点击Create Service Provider Partner创建sp
OAM这里存在很大的误导,OAM的身份方管理指的是OAM作为身份方(IDP),在身份方管理里面创建sp,而不是到服务提供方管理里面创建,oam的服务提供方管理是指OAM作为服务提供方,配置的时候在这里绕了很久才绕出去。
  • 5. 图中所示都是需要填写的内容,推荐使用手动输入方式(Enter Manually),因为adfs的描述文件部分标签OAM不支持,在OAM中无法导入。
Provider IDAssertion Consumer URL保持一致,为adfs的回调地址,这个地址可以在ADFS的metadata文件里面找到
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" ID="_2e0e4be9-cd8d-4ea6-8691-2a3b22b07534" entityID="http://adfsdev.xxxxx.cn/adfs/services/trust">
....
</EntityDescriptor>

其中entityID就是Provider IDAssertion Consumer URL。除此之外,还需要两个证书,签名证书和解密证书,这两个证书分别位于ADFS的metadata文件中:

<IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <KeyDescriptor use="encryption">
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <X509Data>
          <X509Certificate>MIIC6jCCAdKgAwIBAgIQbQz/...............(省略一大段证书内容)</X509Certificate>
        </X509Data>
      </KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="signing">
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <X509Data>
          <X509Certificate>MIIC5DCCAcygAwIBAgIQLE...............(省略一大段证书内容)</X509Certificate>
        </X509Data>
      </KeyInfo>
    </KeyDescriptor>
.....
</IDPSSODescriptor>

在IDPSSODescriptor中,包含一个encryption(解密)证书和一个signing(签名)证书,在本地新建两个文件sign.crt和encryption.crt,将证书内容分别复制到两个文件中,并且证书文件内容必须以-----BEGIN CERTIFICATE-----开头,-----END CERTIFICATE-----结尾,所以你的证书文件应该格式如下:

-----BEGIN CERTIFICATE-----
MIIC6jCCAdKgAwIBAgIQbQz......(省略一大段证书内容)<
-----END CERTIFICATE-----

处理完后,点击Load Signing CertificateLoad Encryption Certificate分别导入到OAM,如果导入正常,OAM会列出证书信息。

NameID Format中,NameID Format选择Email Address,NameID Value 选择 User ID Store Attribute,输入mail(这里取决于用户中心中保存用户邮箱的字段名称)

  • 6.设置SHA-256加密

执行$IAM_ORACLE_HOME/common/bin/wlst.sh脚本,进入wlst,命令如下:

$ cd /oracle/fmwhome/Oracle/Middleware/Oracle_Home/idm/common/bin
$ ./wlst.sh
wls:/offline> connect('weblogic','password','t3://localhost:7001')
wls:/idm_domain/serverConfig/> domainRuntime()
wls:/idm_domain/serverConfig/> configureTestSPEngine("true") 
wls:/idm_domain/domainRuntime/> configureFedDigitalSignature(partner="adfssp2", partnerType="sp", algorithm="SHA-256")
wls:/idm_domain/domainRuntime/> exit()
  • connect连接weblogic服务器
  • domainRuntime进入domainRuntime目录
  • configureTestSPEngine开启测试功能
  • configureFedDigitalSignature配置加密类型partner就是上面创建的sp名称,partnerType为sp,algorithm为SHA-256,configureFedDigitalSignature用法如下:
configureFedDigitalSignature(partner="PARTNER_NAME", partnerType="idp/sp", algorithm="SHA-256/SHA-1")
  • exit退出
  • 7.重启OAM服务器
  • 8.访问http://{OAM Server Host}:{OAM Server Port}/oamfed/idp/initiatesso?providerid=adfssp2进行测试,正常情况下,会重定向到oam的登录页,登录成功后重定向到adfs系统中。

ADFS配置

  • 添加声明提供方信任
声明提供方信任就是IDP
  • 可以选择从URL导入,也可以从文件导入,如果这里有警告忽略即可
如果导入不成功,建议手动导入,输入相关信息
  • 输入名称
  • 检查配置是否正确
  • 完成
  • 创建规则
  • 选择模板(这里翻译有点牵强,英文为Pass Through or Filter Incoming Claim)
  • 输入规则名称,选择类型为名称ID(Name ID),格式为电子邮件(Email),输入电子邮箱后缀
这里配置的是ADFS如何从IDP中获取用户信息,可以从类型的下拉列表中查看支持的所有类型,一般电子邮件格式为user name@xx.com,那么其实可以从电子邮件里提取用户名的,只要配置了后缀信息,adfs就能自动从电子邮件地址中解析出用户名。
  • 进入ADFS登录页可以看到新添加的认证方
ADFS登录页地址为https://host:port/adfs/ls/?wa=wsignin1.0
, ,
Trackback

no comment untill now

Add your comment now