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

时间:2012-04-20 18:25:18

标签: oauth-2.0 dotnetopenauth servicestack

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

对使用WCF构建的API进行身份验证

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

1 个答案:

答案 0 :(得分:4)

只是一些更新

我没有使用AuthenticateAttribute中的RequiredRoleAttributeServiceStack.ServiceInterface

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

在每个自定义RequestFilterAttribute的{​​{1}}方法中,我使用dotnetopenauth中的方法来验证访问令牌。

Execute

访问令牌验证的代码如下,请参阅servicestack和dotnetopenauth的相关文档以获取更多信息。 ResourceServer是dotnetopenauth的类

//httpReq==req from Execute(IHttpRequest req, IHttpResponse res, object requestDto)

如果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

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