2012-04-20 12 views
5

Mam zbudować serwer autoryzacji OAuth2.0 za pomocą dotnetopenauth, który będzie zarządzać uwierzytelnianiem, autoryzacją i przypisać accessToken do dzwoniącego. Wywołujący użyje tokenu dostępu, aby uzyskać dostęp do api (webservices) na serwerze zasobów. Jeśli śledzić próbki dostarczone przez dotnetopenauth w zasobów serwera, API, które zbudował użyciu WCF może być uwierzytelniona przez OAuthAuthorizationManagerJak zbudować zabezpieczone API za pomocą ServiceStack jako serwera zasobów za pomocą OAuth2.0?

przypadku korzystania ServiceStack budować moje API zasobów serwera, jak zbudować proces uwierzytelniania weryfikacji przychodzące żądanie API opartego na przydzielonym tokenie dostępu OAuth2.0? Funkcjonalność powinna być podobna do OAuthAuthorizationManager w próbce dotnetopenid, a nie w oparciu o sesję logowania.

Odpowiedz

4

Tylko niektóre aktualizacja

I nie używać AuthenticateAttribute lub RequiredRoleAttribute z ServiceStack.ServiceInterface.

Tworzę 2 niestandardowe RequestFilterAttribute w celu zastąpienia funkcji dostarczonych przez AuthenticateAttribute i RequiredRoleAttribute.

W każdej niestandardowej metodzie RequestFilterAttributeExecute używam metody w dotnetopenauth, aby zweryfikować token dostępu.

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

Kod dostępu dla tokena weryfikacji, jak następuje, odwołać się do odpowiedniej dokumentacji z obu servicestack i dotnetopenauth aby uzyskać więcej informacji. ResourceServer jest klasa z 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); 

Jeśli ip jest null wtedy nie poświadczone, jeśli nie null, żądanie przychodzące jest ważny i może korzystać z ip sprawdzić rolę np ip.IsInRole(requiredRole)

Nie jestem pewien, czy to jest właściwy sposób sprawdzania czy nie, ale działa to dla mnie. Każde lepsze rozwiązanie jest mile widziane.