如何使用ServiceStack构建安全的api作为OAuth2.0的资源服务器?

LIM*_*ATT 5 dotnetopenauth oauth-2.0 servicestack

我使用dotnetopenauth构建了OAuth2.0授权服务器,该服务器将管理身份验证,授权以及将accessToken分配给调用者.调用者将使用访问令牌访问资源服务器上的api(webservices).如果遵循资源服务器中dotnetopenauth提供的示例,则可以通过OAuthAuthorizationManager对使用WCF 构建的 API进行身份验证

如果使用ServiceStack在Resource Server中构建我的api,如何根据分配的OAuth2.0访问令牌构建验证传入api请求的身份验证过程?该功能应类似于dotnetopenid示例中的OAuthAuthorizationManager,而不是基于登录会话.

LIM*_*ATT 4

只是一些更新

我没有使用AuthenticateAttributeRequiredRoleAttributefrom ServiceStack.ServiceInterface

我创建了 2 个自定义来替换和RequestFilterAttribute提供的功能。AuthenticateAttributeRequiredRoleAttribute

在每个 customRequestFilterAttributeExecute方法中,我使用 dotnetopenauth 中的方法来验证访问令牌。

//httpReq==req from Execute(IHttpRequest req, IHttpResponse res, object requestDto)
Run Code Online (Sandbox Code Playgroud)

访问令牌验证的代码如下,请参考 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);
Run Code Online (Sandbox Code Playgroud)

如果ipnull未经过身份验证,如果不是null,则传入请求有效,可以使用ip来检查角色,例如ip.IsInRole(requiredRole)

我不确定这是否是进行检查的正确方法,但它对我有用。欢迎任何更好的解决方案。