1.介绍
Oracle Access Manager(OAM)是oracle公司开发的身份认证和资源管理解决方案。结合WebGate和OHS可实现系统间单点登录集成。
oracle中间件产品可以非常方便的与OAM进行集成,通过配置weblogic安全域(Security Realms),应用几乎不用做任何改动即可实现单点登录。
后台接口开发中获取当前登录用户是不可避免的一个步骤,spring boot也是如此,本文介绍spring boot与OAM集成的一个可行并且认为是简单的方案。
2.实现
2.1 问题
要实现两者之间的集成需要解决两个问题:
spring boot是无状态应用,如何获取当前用户信息
spring boot不是部署weblogic上,无法通过weblogic 安全域进行单点登录集成(当然spring boot也可以部署到weglogic上,这个不是本文讨论的方向)
2.2 思路
通过ohs代理,spring boot可以获取cookie等信息
调用OAM SDK通过cookie获取当前用户信息
只要实现以上两点就能实现spring boot 在脱离weblogic的情况下也能获取用户信息,如果可行,该方案适用于任何后端程序。
2.3 准备工作
2.3.1 SDK下载安装
在这里可以下载sdk,下载时请选择对应的OAM版本,本文使用11.1.1.5.0版本。
为了使用方便,可以将jar包安装到本地maven仓库
mvn install:install-file -Dfile="/Users/asan/workspace/mpaas/lib/oamasdk-api.jar" -DgroupId=com.oracle -DartifactId=oamasdk-api -Dversion=11.1.1.5.0 -Dpackaging=jar
这样可以通过以下方式在pom中引用
com.oracle
oamasdk-api
11.1.1.5.0
2.3.2 配置webgate
登录oamconsole(一般是http://host:7001/oamconsole),在欢迎界面创建一个新的OAM 11g Webgate输入Name和Host Identifier,这两个默认一样,一定要将Access Client Password设置为空,因为在实践中,sdk无法解析密码,报错信息如下
2018-10-10 22:46:18 oracle.security.am.asdk.AccessClient initialize
严重: Oracle Access SDK 初始化失败。
oracle.security.am.asdk.AccessException: OAMAGENT-02072: 无法执行encrypt password操作。
at oracle.security.am.asdk.impl.Configuration.setEncryptedPassword(Configuration.java:321)
at oracle.security.am.asdk.impl.ConfigXMLHandler.processConfig(ConfigXMLHandler.java:580)
at oracle.security.am.asdk.impl.ConfigXMLHandler.readConfigurationFromFile(ConfigXMLHandler.java:126)
at oracle.security.am.asdk.AccessClient.initialize(AccessClient.java:634)
at oracle.security.am.asdk.AccessClient.(AccessClient.java:553)
at oracle.security.am.asdk.AccessClient.createDefaultInstance(AccessClient.java:242)
...
官方说是sdk版本问题,但笔者试过所有的sdk版本还是无法解决。
点击右上角Apply后可以有系统提示,在提示路径下可以找到ObAccessClient.xml文件,这个就是webgate的配置文件,在实际环境配置中,需要将该文件放到$OHS_HOME/config/webgate/config目录下,才能实现ohs资源拦截认证。