1

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

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

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

谢谢

4

2 回答 2

5

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

  • 访问控制 > 顶级领域 > 代理 > Web / J2EE / 等 > 点击一个代理
  • 应用程序选项卡 > 配置文件属性处理部分 > 配置文件属性获取模式:
  • 单击“HTTP_HEADER”选项
  • 配置文件属性映射:
  • Map Key:[uid] ...对应的Map Value:uid
  • 单击添加。添加后它应该看起来像 [uid]=uid。将您需要的与属性匹配的任何其他映射添加到后端身份验证系统。我们的是ldap。

在您的 Web 应用程序中,检索 HTTP 标头元素并查找令牌。它应该看起来像这样: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

于 2014-01-30T23:42:13.303 回答
2

1) 是的,代理会创建明文 cookie(如果用户发送恶意的,它会重新创建它们就好了),但是使用 HTTP_HEADER 方法传递属性被认为是更好的解决方案(因为它不存储在客户端) .

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

于 2012-04-06T09:47:37.133 回答