2012-04-20 10 views
5

Tôi đã xây dựng một máy chủ Ủy quyền OAuth2.0 bằng cách sử dụng dotnetopenauth sẽ quản lý xác thực, ủy quyền và gán accessToken cho người gọi. Người gọi sẽ sử dụng mã thông báo truy cập để truy cập api (webservices) tại máy chủ tài nguyên. Nếu làm theo mẫu được cung cấp bởi dotnetopenauth trong Resource Server, api rằng builded sử dụng WCF có thể được chứng thực bởi OAuthAuthorizationManagerLàm thế nào để xây dựng api bảo mật bằng cách sử dụng ServiceStack như máy chủ tài nguyên với OAuth2.0?

Nếu sử dụng ServiceStack để xây dựng api của tôi trong Resource Server, làm thế nào để xây dựng quá trình xác thực xác minh theo yêu cầu api đến dựa về mã thông báo truy cập OAuth2.0 được chỉ định? Các chức năng nên tương tự như OAuthAuthorizationManager trong mẫu dotnetopenid và không dựa trên phiên đăng nhập.

Trả lời

4

Chỉ cần một số cập nhật

tôi đã không sử dụng AuthenticateAttribute hoặc RequiredRoleAttribute từ ServiceStack.ServiceInterface.

Tôi tạo 2 tùy chỉnh RequestFilterAttribute để thay thế các chức năng được cung cấp bởi AuthenticateAttributeRequiredRoleAttribute.

Trong mỗi phương thức RequestFilterAttribute tùy chỉnh Execute, tôi đang sử dụng phương pháp trong dotnetopenauth để xác minh mã thông báo truy cập.

//httpReq==req from Execute(IHttpRequest req, IHttpResponse res, object requestDto) 

Mã xác minh mã thông báo truy cập như sau, tham khảo tài liệu liên quan từ cả hai servicestack và dotnetopenauth để biết thêm thông tin. ResourceServer là lớp từ dotnetopenauth

HttpRequestBase reqBase = new HttpRequestWrapper((System.Web.HttpRequest)httpReq.OriginalRequest); 

var resourceServer = new ResourceServer(new StandardAccessTokenAnalyzer(AuthorizationServerPublicKey, ResourceServerPrivateKey)); 

IPrincipal ip = null; 
resourceServer.VerifyAccess(reqBase, out ip); 

Nếu ipnull sau đó không được xác thực, nếu không muốn nói null, yêu cầu đến là hợp lệ và có thể sử dụng ip để kiểm tra vai trò các ví dụ ip.IsInRole(requiredRole)

Tôi không chắc đây là cách chính xác để thực hiện việc kiểm tra hay không, nhưng nó có tác dụng đối với tôi. Bất kỳ giải pháp tốt hơn đều được chào đón.