只是一些更新
我沒有使用從ServiceStack.ServiceInterface
的AuthenticateAttribute
或RequiredRoleAttribute
。
我創建了2個自定義RequestFilterAttribute
來替換AuthenticateAttribute
和RequiredRoleAttribute
提供的功能。
在每個自定義RequestFilterAttribute
的Execute
方法中,我使用dotnetopenauth中的方法來驗證訪問令牌。
//httpReq==req from Execute(IHttpRequest req, IHttpResponse res, object requestDto)
訪問令牌驗證的代碼如下,參考servicestack和dotnetopenauth的相關文檔獲取更多信息。 ResourceServer是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);
類如果ip
是null
則未通過身份驗證,如果沒有null
,傳入的請求是有效的,可以使用ip
檢查的作用如ip.IsInRole(requiredRole)
我不確定這是否是執行檢查的正確方法,但它適用於我。歡迎任何更好的解決方案。