簡體   English   中英

應用程序服務器如何知道用戶具有什么角色?

[英]How does an application server know what role a user has?

我不熟悉基於應用服務器的安全約束。 對於以下 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 請求,它知道該請求具有訪問資源的適當角色?

它存儲在web容器中的HTTP Session。 通常,客戶端在第一次向服務器發出請求時會收到一個 session ID(通常以 cookie 的形式,但不一定是)——或者在其先前的 session 過期后向服務器發出的第一次請求。 然后,客戶端將在后續請求中發送該 session ID。 客戶端通過身份驗證后,其安全上下文將存儲在與 session ID 關聯的 HTTP Session 中。 流程看起來像這樣:

客戶:您好,我想訪問您的服務。

服務器:好的,你是誰?

客戶:我是鮑勃,這是我的密碼。 (發送憑據 - 不必是使用用戶名/密碼的基本身份驗證)

服務器:嗨,鮑勃 - 這是您入住時的身份證。 它會在 30 分鍾不活動后過期。 享受! (發送 session ID)

客戶:太好了,我想訪問資源 XYZ。 這是我的身份證。 (發送 session ID)

服務器:沒問題 - 我們檢查了注冊表並確定您所在的組有權訪問 XYZ。 享受!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM