如何使用ServiceStack与OAuth2.0的资源服务器建立安全的API?(How to bu

2019-07-29 02:16发布

我建立使用的OAuth2.0授权服务器dotnetopenauth将管理认证,授权和分配的accessToken给调用者。 来电者将使用访问令牌在资源服务器访问的API(web服务)。 如果遵循dotnetopenauth在资源服务器提供的样品,API,它建造使用WCF可以通过认证OAuthAuthorizationManager

如果使用ServiceStack建立我的资源服务器API,如何建立认证过程,验证基于指定的OAuth2.0访问令牌传入API请求? 该功能应该类似于OAuthAuthorizationManager的dotnetopenid样品中,而不是基于登录会话。

Answer 1:

只是一些更新

我没有使用AuthenticateAttributeRequiredRoleAttributeServiceStack.ServiceInterface

我创建2个自定义RequestFilterAttribute更换所提供的功能AuthenticateAttributeRequiredRoleAttribute

在每个自定义RequestFilterAttributeExecute方法,我用了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);

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

我不知道这是应该做的检查或不正确的做法,但它是为我工作。 任何更好的解决方案是受欢迎的。



文章来源: How to build secured api using ServiceStack as resource server with OAuth2.0?