Kỹ thuật xác thực api web


26

Chúng tôi có khung dịch vụ web asp.net MVC để cung cấp xml / json cho mọi người Nhận yêu cầu nhưng đang vật lộn để tìm ra cách tốt nhất (nhanh chóng, dễ dàng, tầm thường cho người dùng mã hóa bằng ngôn ngữ javascript hoặc OO) để xác thực người dùng. Không phải dữ liệu của chúng tôi nhạy cảm hay gì cả, chúng tôi chỉ muốn người dùng đăng ký để chúng tôi có thể có địa chỉ email của họ để thông báo cho họ về những thay đổi và theo dõi việc sử dụng.

Trong lần thử trước, chúng tôi đã có tên người dùng trong URI và sẽ chỉ đảm bảo rằng tên người dùng tồn tại và tăng các bảng db với việc sử dụng. Điều này là siêu cơ bản nhưng chúng tôi nhận thấy mọi người sử dụng bản demo làm tên người dùng, v.v. vì vậy chúng tôi cần nó phức tạp hơn một chút.

Những kỹ thuật xác thực có sẵn? Những người chơi chính sử dụng / làm gì.


Bạn nghĩ gì về một "người chơi chính"? Hãy liệt kê một vài ví dụ. Trong khi bạn đang ở đó, vui lòng bao gồm một liên kết đến các định nghĩa API "người chơi chính" để chúng tôi có thể thấy những gì họ làm.
S.Lott

Tôi sẽ xem xét twitter / facebook / google / flicker những người chơi chính. developers.facebook.com apiwiki.twitter.com
Steve

Câu trả lời:


10

Tôi đã hỏi câu hỏi đó trên StackOverflow và bạn có thể đọc nó ở đây . Cũng xem câu trả lời của tôi cho câu hỏi của riêng tôi. Đó là về xác thực chính xác mà không phải chuyển mật khẩu cho từng yêu cầu và không có SSL hoặc Mã hóa. Chỉ cần băm đơn giản.


Tôi không chắc chắn tôi thích giải pháp của bạn.
Steve

Steve: sử dụng giải pháp Flickr

Có một giải pháp nhấp nháy mã nguồn mở hay tôi chỉ cần đọc api của họ và tìm ra nó?
Steve

Đọc API của họ, nó rất đơn giản. Không an toàn như phương pháp của tôi nếu bạn không có SSL, nhưng rất tốt

Giải pháp md5 của bạn dường như không phù hợp với hóa đơn với "tầm thường cho người dùng javascript". Tôi sẽ phải kiểm tra API flickr một số nữa. Tôi liếc qua nó nhưng cần nghiên cứu một số thuật ngữ. Chủ yếu là những gì frob's là.
Steve

3

Video này là một cách thú vị để sử dụng khóa API với dịch vụ WCF / REST của bạn. .


đây là ý tưởng tương tự như đưa tên người dùng vào dịch vụ trừ khi họ gọi nó là khóa api. Ai đó có thể nhìn vào nguồn của trang nếu javascript và sao chép khóa và sử dụng nó ở nơi khác. Bạn có muốn có một khóa api được liên kết với một miền gọi để khóa api cần phải hợp lệ và nó cần phải đến từ xyz.com?
Steve

đây có phải là bản sao của những gì @KinGBin đề xuất không?
Steve

0

Tôi lấy nó bằng cách sử dụng phòng thu trực quan. Nếu bạn sử dụng so với khung 2010 với khung 4.0, bạn có thể xem mẫu "Dịch vụ RESTF REST với xác minh khóa API" trong so với năm 2010.


1
Tôi sẽ phải nhìn vào đó. Tôi muốn thoát khỏi WCF mặc dù cá nhân.
Steve

Điều này thật thú vị, nhưng có vẻ như nó chỉ vượt qua APIKey trong chuỗi truy vấn. Điều đó không có nghĩa là khóa API hiển thị cho bất kỳ ai giữa người gọi và callee - ngay cả khi bạn sử dụng SSL?
JMarsch

0

Tôi luôn sử dụng xác thực HTTP cho các dịch vụ web. Việc xác thực sẽ được xử lý bởi máy chủ web của bạn, có thể là IIS trong trường hợp của bạn. Sau đó, bạn sẽ định cấu hình IIS để xác thực dựa trên cơ sở dữ liệu của mình, cửa hàng LDAP hoặc tương tự.

Sau đó, bạn sẽ truy cập tên người dùng thông qua thuộc tính User.Identity.Name

EDIT : Ví dụ xác thực JQuery:

/* I found that providing the username and password both in the
   the arguments and in the url parameter seems to have better compatibility,
   if it works well for you, it is highly advisable to remove the 
   user/pass from the url */

function doLogin (){
  $.ajax({
    username: $('#username').val(),
    password: $('#password').val(),
    url: 'https://'+$('#username').val()+':'+$('#password').val()+'@api.example.com',
    dataType: 'jsonp',
    context: $('#result'),
    success: function(d) { $(this).html(d); $(location).attr('href','https://api.example.com/success'); }
    });
    return false;
}

Làm thế nào bạn sẽ làm điều này với một khách hàng javascript?
Steve

client = new XMLHttpRequest (); client.open (phương thức, url, async, người dùng, mật khẩu);
ewindisch

đã thêm ví dụ jquery để trả lời
ewindisch

1
vì vậy, sự kết hợp mật khẩu tên người dùng sẽ phải nằm trong văn bản thuần túy trong nguồn. Có vẻ như không phải là một ý tưởng tốt.
Steve

1
ok, vậy về cơ bản bạn sẽ phải nhập tên người dùng / mật khẩu của mình vào màn hình đăng nhập để thực hiện yêu cầu api? Giải pháp đó thật tồi tệ. Mỗi người dùng đến một trang web công cộng sẽ phải được đăng ký?
Steve
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.