【问题标题】:How does an application server know what role a user has?应用服务器如何知道用户的角色?
【发布时间】:2021-08-26 14:43:38
【问题描述】:

我不熟悉基于应用服务器的安全约束。对于以下 web.xml 示例,我看到了定义的角色以及哪个角色可以访问受限资源。

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Whatever</realm-name>
</login-config> 

<security-role>
    <description>Administrator Role</description>
    <role-name>admin</role-name>
</security-role>

<security-role>
    <description>Privileged User</description>
    <role-name>privileged</role-name>
</security-role>

<security-role>
    <description>Guest User</description>
    <role-name>guest</role-name>
</security-role>


<security-constraint>
    <web-resource-collection>
        <web-resource-name>Privileged area</web-resource-name>
        <url-pattern>/restricted/*</url-pattern>
    </web-resource-collection>
    
    <auth-constraint>
        <role-name>admin</role-name>
        <role-name>privileged</role-name>
    </auth-constraint> 
</security-constraint>

当用户第一次发出 http 请求以访问受限页面时,他们没有角色并要求输入用户名/密码。容器可以根据数据库验证用户名并为用户分配角色(例如管理员)。容器在哪里存储这个角色,以便后续的 http 请求,它知道该请求具有适当的角色来访问资源?

【问题讨论】:

    标签: java web-applications websphere web-container


    【解决方案1】:

    它存储在 Web 容器中的 HTTP Session 中。通常,客户端会在其对服务器的第一个请求或在其上一个会话过期后对服务器的第一个请求时收到一个会话 ID(通常以 cookie 的形式,但并非必须如此)。然后,客户端将在后续请求中发送该会话 ID。客户端通过身份验证后,其安全上下文将存储在与会话 ID 关联的 HTTP 会话中。 流程看起来像这样:

    客户:您好,我想访问您的服务。

    服务器:好的,你是谁?

    客户:我是 Bob,这是我的密码。 (发送凭据 - 不必是带有用户名/密码的基本身份验证)

    服务员:您好 Bob - 这是您入住时的身份证。它会在 30 分钟不活动后过期。享受! (发送会话 ID)

    客户:太好了,我想访问资源 XYZ。这是我的身份证。 (发送会话 ID)

    服务器:没问题 - 我们检查了注册表并确定您所在的组有权访问 XYZ。享受吧!

    【讨论】:

    • 容器是否在登录表单中寻找特定的输入字段?此外,如果应用程序提供自己的登录表单并在数据库表中查找用户角色,那么应用程序是否必须做一些事情来将角色信息存储在会话中?有具体的属性吗?
    • 对于基于表单的登录,此页面可能有用:ibm.com/support/pages/form-based-login-liberty - tl;dr 您的表单应包含 j_usernamej_password 的文本字段,并且表单本身应 POST 到 @987654324 @。如果应用程序自己进行身份验证检查,那么您可能需要实现 JAAS 服务 - 抱歉,我不是该领域的专家。我通常只依靠应用服务器来处理身份验证。 :)
    • 让我看看页面。谢谢!
    猜你喜欢
    • 2020-09-06
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多