模拟IDP SSO到阿里云

img

增加了一个简易版的SAML SP的java实现,地址在这里

前言

基本上是各大云产商的SSO都默认支持SAML协议. 但是由于配置比较复杂,很多人第一次接触的时候都是觉得比较难以理解.前段时间由于工作需要写了个支持saml协议的简易IDP.下面就来介绍一下怎么使用简易的IDP SSO到阿里云

代码

我已经把代码放到Github上: https://github.com/ichengchao/hellosaml ,这个代码本身非常简单,使用了springboot.

  • 监听端口: 8080
  • 启动类: name.chengchao.hellosaml.MyApplication.main
  • 配置类: name.chengchao.hellosaml.common.CommonConstants
  • URL配置: name.chengchao.hellosaml.controller.SampleController

提供两个功能,分别是:

实操

生成证书

1
2
3
4
5
#create the keypair
openssl req -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.pem

#convert the private key to pkcs8 format
openssl pkcs8 -topk8 -inform PEM -outform DER -in saml.pem -out saml.pkcs8 -nocrypt

完成后会生成3个文件:

  • saml.crt
  • saml.pem
  • saml.pkcs8

修改name.chengchao.hellosaml.common.CommonConstants

  • PUBLIC_KEY_PATH配置成saml.crt的文件的绝对路径,比如: /Users/charles/test/saml.crt
  • PRIVATE_KEY_PATH配置成saml.pkcs8的文件的绝对路径,比如: /Users/charles/test/saml.pkcs8

配置阿里云

启动hellosaml应用,保存http://localhost:8080/metaxml的内容到meta.xml

登录阿里云RAM控制台 ,在角色SSO的tab页新增一个身份提供商

Screen Shot 2020-09-30 at 14.44.47

取一个名字比如superAD,将保存的meta.xml上传上去. 接着在切换到RAM角色管理的页面,创建一个RAM角色.假设叫super2类型选择身份供应商

image-20200930145032828

接着给这个RAM角色授权,简单点的话可以直接选取一个系统内置的权限,比如AdministratorAccess.

Screen Shot 2020-09-30 at 14.59.12

到这里,阿里云侧的配置就全部完成了,还是非常简单的.

调试

修改name.chengchao.hellosaml.common.CommonConstants

将ROLE_LIST按照一下格式配置

1
2
3
acs:ram::{uid}:role/{rolename},acs:ram::{uid}:saml-provider/{idp_provider_name}

比如: acs:ram::1764263140479999:role/super2,acs:ram::1764263140479999:saml-provider/superAD

完成后,再次启动应用,访问http://localhost:8080/login 就能SSO到阿里云了.