只是一些更新
我没有使用AuthenticateAttributeor RequiredRoleAttributefrom ServiceStack.ServiceInterface。
我创建了 2 个自定义RequestFilterAttribute来替换 和 提供的AuthenticateAttribute功能RequiredRoleAttribute。
在每个 customRequestFilterAttribute的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)
我不确定这是否是进行检查的正确方法,但它对我有用。欢迎任何更好的解决方案。