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