2013-02-19 43 views
5

Tôi đang viết dịch vụ Xác minh mật khẩu bằng ASP.NET Web Api.Dịch vụ xác minh mật khẩu xác minh

Dịch vụ chấp nhận mật khẩu cho người dùng hiện đã đăng nhập, xác minh và trả về giá trị được mã hóa. Tất cả điều này xảy ra qua SSL.

Gọi phương thức này không làm thay đổi trạng thái.

Ban đầu, có vẻ như đây là yêu cầu GET tuy nhiên khi kiểm tra thêm, tôi lo ngại về việc máy chủ web ghi lại mật khẩu văn bản thuần túy.

Chúng tôi có thể thực hiện điều này dưới dạng POST nhưng điều đó có vẻ như động từ sai do hành động.

Đây có phải chỉ đơn giản là một trường hợp chủ nghĩa thực dụng về thủ tục hay là chúng ta có thể làm gì hơn để thực hiện cả hai trường hợp thực dụng và RESTful?

Trả lời

1

Bạn nên sử dụng Basic Authentication nơi bạn chuyển tên người dùng/mật khẩu làm tiêu đề. Điều này cũng phù hợp hơn với tiêu chuẩn đã được xác định.

Đã có mã javascript để thực hiện mã hóa base64 - nếu bạn cần thực hiện việc này trên trình duyệt.


Nếu bạn làm điều này để xác thực và giá trị được mã hóa là mã thông báo truy cập (cookie), tốt hơn nên sử dụng OAuth 2.0.

+0

Cảm ơn Aliostad. Nhìn vào các chi tiết cơ bản Auth nó không hoàn toàn những gì chúng ta cần (danh sách nhược điểm nói riêng). Chúng tôi không thực sự ký người dùng vào, chúng tôi chỉ đơn giản là kiểm tra xem người dùng hiện đã đăng nhập có biết mật khẩu của họ không (hàng rào mật khẩu khi thay đổi một số cài đặt). –

0

Nếu cuộc gọi API gửi phản hồi không phải là tài nguyên cho mỗi lần truy cập (không liên quan đến tài nguyên được trả về từ kho dữ liệu), bạn nên sử dụng động từ không phải danh từ.

Bạn có thể có một bộ điều khiển UserPasswordsController đó cho thấy nhiều phương pháp hành động như thế này:

[HttpPost()] 
public HttpResponseMessage Validate() 
{ 
    if (!this.Request.Content.IsFormUrlEncodedContent()) 
    { 
     return this.Request.CreateErrorResponse(
      HttpStatusCode.BadRequest, 
      "Body of request must be form URL encoded." 
     ); 
    } 

    var parameters = this.Request.Content.ReadAsFormDataAsync().Result; 

    var userName = parameters["userName"]; 
    var password = parameters["password"]; 

    // TODO: Validate user name and password 
    var isValid = true; 

    if(!isValid) 
    { 
     return this.Request.CreateErrorResponse(
      HttpStatusCode.Forbidden, 
      String.Format(null, "The password provided for {0} is not valid.", userName) 
     ); 
    } 

    return this.Request.CreateResponse(HttpStatusCode.OK); 
} 

Và có một lộ trình đăng ký như thế này:

routes.MapHttpRoute(
    name:   "UserPasswords", 
    routeTemplate: "api/v1/validate", 
    defaults:  new { controller = "userpasswords" } 
); 

Bạn sẽ POST hình thức dữ liệu đến các thiết bị đầu cuối xác nhận rằng chứa tên người dùng và mật khẩu bạn muốn xác thực. Trạng thái Trạng thái bị cấm cho biết mật khẩu không hợp lệ, trong khi trạng thái của OK được trả lại nếu mật khẩu hợp lệ.

Nếu bạn mới làm việc trên các giao diện REST và muốn thực hiện một cách tiếp cận thực dụng, tôi khuyên bạn nên xem Web API Design - Crafting Interfaces that Developers Love.