Trong bài trước các bạn đã biết cách cấu hình asp.net membership authentication service để dùng trên mobile app. Các bạn có thể xem thêm tại link sau:
ASP.NET Mermbership Authentication service mặc định trả về định dạng dữ liệu xml nên với các ứng dụng cùng họ .net như winform, webform, windows phone thì chỉ cần add service reference là có thể dùng được rất đơn giản và dễ dàng, tuy nhiên việc xử lý xml trên các ứng dụng mobile android, ios hay javascript khác họ .NET tương đối mất thời gian và công sức. Nếu định dạng trả về là JSON (Javascript Object Notation) thì mọi chuyện đã trở nên đơn giản hơn.
Vậy có cách nào làm được điều này không? Câu trả lời là có nhưng bạn cần cấu hình ở mức web.config chứ không thể cấu hình được ở mức service hay mức từng hàm authentication.
Bài này chúng ta sẽ sử dụng lại service authentication đã có trong bài trước, source code tại đây
Để expose authentication service ra json đơn giản chúng ta chỉ cần cấu hình một endpoint REST sử dụng webhttpbinding và behaviorConfiguration với 2 thuộc tính dùng để overwrite định dạng mặc định trả về xml như sau: defaultOutgoingResponseFormat= “Json” và defaultBodyStyle=”Wrapped”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <services> <service behaviorConfiguration="AuthenticationServiceBehaviors" name="System.Web.ApplicationServices.AuthenticationService"> <endpoint address="" behaviorConfiguration="ajaxBehavior" contract="System.Web.ApplicationServices.AuthenticationService" binding="webHttpBinding" bindingConfiguration="RestBinding" bindingNamespace="http://asp.net/ApplicationServices/v200"/> </service> </services> <bindings> <webHttpBinding> <binding name="RestBinding" /> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="ajaxBehavior"> <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" defaultBodyStyle="Wrapped" /> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="AuthenticationServiceBehaviors"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> |
Sau đó kiểm tra authentication service xem đã expose JSON hay chưa bằng cách browser service help
Dùng fiddler thử gọi service authentication login với một account cụ thể chúng ta sẽ thấy lỗi AuthenticationService is disabled như bên dưới
Chúng ta cần enable authentication service trong web.config và thử lại bây giờ kết quả sẽ trả về true tức là đã đăng nhập thành công.
1 2 3 4 5 6 7 8 | <system.web.extensions> <scripting> <webServices> <authenticationService enabled="true" requireSSL="false" /> </webServices> </scripting> </system.web.extensions> |
Cách sử dụng authentication service trên các ứng dụng android, ios, javascript đơn giản chỉ là cách gọi đến rest service authentication service ở trên. Các bạn có thể tham khảo thêm cách sử dụng ở link sau:
- Sử dụng WCF Service trên Windows Phone 8.1
- Download và upload ảnh sử dụng ASP.NET Web API trên ASP.NET MVC
Hy vọng bài viết này sẽ giúp ích cho các bạn đang cần xây dựng phần bảo mật cho các ứng dụng của mình trên nền tảng .NET mà cụ thể ở đây là sử dụng ASP.NET membership authentication service.
Source code demo các bạn có thể download tại đây: AuthenticationServiceJSON
Happy sharing, stay tuned.
Lương Từ says
Đúng cái mà em cần rồi cảm ơn anh nhiều nhé
tungnt185 says
OK em
Lương Từ says
Em đã làm như hướng dẫn của anh nhưng sao khi thử với filder thì nó bị bad request vậy anh?
tungnt185 says
Bad request là do request gửi lên không đúng định dạng yêu cầu. Em kiểm tra lại xem đã sử dụng phương thức POST, thêm dòng Content-Type:application/json như hình vẽ của anh ở trên chưa. Tốt nhất là nên download source code của anh về để thử nghiệm.
Lương Từ says
Em đã download sourcecode của anh rồi nhưng khi test thì vẫn bị như thế này:
HTTP/1.1 405 Method Not Allowed