只是一些更新
我没有使用来自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)
我不确定这是否是进行检查的正确方法,但它对我有用。欢迎任何更好的解决方案。