簡體   English   中英

使用JDBCRealm保護REST Web服務?

[英]Using JDBCRealm securing REST webservices?

我在這里已經閱讀了很好的答案,如何保護REST服務,但所有這些只是純粹的理論,並沒有那么多幫助。 如何在使用REST時實現JDBCRealm-FORM身份驗證?

登錄表單

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Login Form</title>
</head>

<body>
<form method="post" action="j_security_check">
<p>You need to log in to access protected information.</p>
<table>
   <tr>
      <td>User name:</td>
      <td><input type="text" name="j_username" /></td>
   </tr>
   <tr>
      <td>Password:</td>
      <td><input type="password" name="j_password" /></td>
   </tr>
</table>
<p><input type="submit" value="Login" /></p>
</form>
</body>
</html>

web.xml中

<security-constraint>
    <web-resource-collection>
        <web-resource-name>How to protect REST</web-resource-name>
        <url-pattern>/protected/*</url-pattern>----> What is that in case of rest?
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>HEAD</http-method>
        <http-method>PUT</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
        <http-method>DELETE</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
        <role-name>customer</role-name>
        <role-name>user</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbcRealm</realm-name>

</login-config>
<security-role>
    <role-name>admin</role-name>
</security-role>
<security-role>
    <role-name>user</role-name>
</security-role>
<security-role>
    <description/>
    <role-name>customer</role-name>
</security-role>

問題:

1)我在Glassfish中創建了JDBCRealm,它正在運行。 我用另一個jsf-app測試了它。 在clien-REST-service的情況下,例如: <url-pattern>/protected/*</url-pattern>在正常情況下,它指的是受保護的jsp / jsf / xhtml等頁面所在的“文件夾”,但是現在在哪里?

2)會話怎么樣? 我認為在無狀態環境中使用會話是不可能的

3)甚至可以在REST中使用基於FORM的身份驗證嗎?

4)任何鏈接到教程,其中有人比我更聰明解釋如何保護客戶端 - 服務器休息應用程序。

不能使用REST進行FORM身份驗證,因為每個請求本身都必須完整且無狀態。 具有重定向的表單不是。 您需要使用標准的基於HTTP標頭的機制,如Basic,Digest等。

1)我在Glassfish中創建了JDBCRealm,它正在運行。 我用另一個jsf-app測試了它。 在clien-REST-service的情況下,例如:/ protected / *在正常情況下,它引用受保護的jsp / jsf / xhtml等頁面的“文件夾”,但現在在哪里?

您可以選擇保護整個REST服務子域或其中的一部分。 假設您將root配置為/rest ,那就是您要在url-pattern中添加的內容。

2)會話怎么樣? 我認為在無狀態環境中使用會話是不可能的

取決於您的REST實施。 使用JAX-RS(Jersey),答案絕對是肯定的,您可以使用HTTP會話。 您可以通過@Context注釋將其注入資源類:

@Path("/echo")
public class EchoServiceImpl {
    @Context
    private HttpSession session;
}

確認您可以使用該會話后,我強烈建議不要使用該會話,因為RESTful調用應該是無狀態的。

3)甚至可以在REST中使用基於FORM的身份驗證嗎?

使用基於表單的REST身份驗證沒有意義,沒有。 您正在設計供其他計算機系統使用的服務,而不是人類使用的服務。 此過程中不應包含交互式UI。

4)任何鏈接到教程,其中有人比我更聰明解釋如何保護客戶端 - 服務器休息應用程序。

這是一個艱難的指南,有許多指南,但其中很多都非常特定於REST實現中使用的特定技術堆棧。 首先,我建議您將當前配置從FORM更改為BASIC,並考慮使用SSL保護端點。 請記住,在使用基本身份驗證時,您需要在Authorization標頭中包含用戶憑據:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

您可以在此處閱讀有關如何計算標題的信息

一旦熟悉了基本/摘要式身份驗證,您就可以開始尋找更高級的安全選項,例如OAuth。

暫無
暫無

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

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