如何从openSSO / openAM系统获取用户名?

时间:2012-04-05 19:31:49

标签: authentication cookies opensso openam

我目前正在使用openAM来保护使用Java EE Web代理的我的小型webapp。有人试图访问该应用程序,他们被重定向到openAM实例,他们登录,他们转到应用程序。简单的东西。

我想要的是openAM将成功使用的用户名传递给Web应用程序。我的理解是应该使用“会话属性”。在管理员中,我转到我的Java EE webagent并打开“应用程序”选项卡以查看“会话属性处理”。我看到HTTP_COOKIE是获取的选择。

1)我是否应该在cookie中看到用户名(如果设置正确)作为明文? 2)我在会话映射中输入什么值来获取用户名?如何找到数据存储中的哪个值与此对应?

由于

2 个答案:

答案 0 :(得分:4)

我们正在使用HTTP_HEADER与我们的代理商。因此,如果您已经在使用代理(听起来像你),那么以下内容应该适合您。在OpenAM Web控制台中:

  • 访问控制>顶级域名>代理商> Web / J2EE /等>点击代理商
  • 应用程序选项卡&gt; <简档属性处理部分>配置文件属性获取模式:
  • 点击“HTTP_HEADER”选项
  • 配置文件属性映射:
  • 地图键:[uid] ...对应的地图值:uid
  • 单击“添加”。一旦你添加它,它应该看起来像[uid] = uid。将您需要的任何其他映射添加到后端身份验证系统中。我们是ldap。

在您的Web应用程序中,检索HTTP Header元素并查找令牌。它看起来应该是这样的:AQIC5wM2LY4RfckcedfzxGrgVYevbKR-SgBkuemF4Cmm5Qg。 AAJTSQABMDE。

然后,您可以使用OpenAM REST界面验证和检索与令牌关联的属性,例如用户名,密码,cn等。要检索所有属性,URL将如下所示:

http://<OpenAM_Host>:<Port>/<deploy_uri>/identity/attributes?subjectid=AQIC5wM2LY4RfckcedfzxGrgVYevbKR-SgBkuemF4Cmm5Qg.*AAJTSQABMDE.*

您还可以像这样指定所需的属性:

http://<OpenAM_Host>:<Port>/<deploy_uri>/identity/attributes?subjectid=AQIC5wM2LY4RfckcedfzxGrgVYevbKR-SgBkuemF4Cmm5Qg.*AAJTSQABMDE.*&attributenames=uid&attributenames=userpassword

参考文献:
https://wikis.forgerock.org/confluence/display/openam/Use+OpenAM+RESTful+Services
http://openam.forgerock.org/openam-documentation/openam-doc-source/doc/dev-guide/index/chap-rest.html

答案 1 :(得分:2)

1)是的,代理将创建明文cookie(如果用户发送恶意代码,它将很好地重新创建它们),但是使用HTTP_HEADER方法传递属性被认为是更好的解决方案(因为它没有存储在客户方)。

2)会话属性处理仅在您实际存储会话中的内容时才有效。为此,您可以使用“身份验证所有核心设置”中的“用户属性映射到会话属性”功能,也可以编写一些自定义模块来保存派生值。否则,如果您只想获取用户的uid,请使用配置文件属性处理(uid键HTTP_UID值,您的应用将看到HTTP_UID cookie /标头)。