5

我已经使用dotnetopenauth构建了一个 OAuth2.0 授权服务器,它将管理身份验证、授权并将 accessToken 分配给调用者。调用者将使用访问令牌访问资源服务器上的 api (webservices)。如果按照资源服务器中dotnetopenauth提供的示例,使用WCF构建的api可以通过OAuthAuthorizationManager进行身份验证

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

4

1 回答 1

4

只是一些更新

我没有使用AuthenticateAttributeor RequiredRoleAttributefrom ServiceStack.ServiceInterface

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

在每个 customRequestFilterAttributeExecute方法中,我使用 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)

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

于 2012-06-01T17:05:07.887 回答