【问题标题】:How to build secured api using ServiceStack as resource server with OAuth2.0?如何使用 ServiceStack 作为 OAuth2.0 的资源服务器构建安全 api?
【发布时间】:2012-05-02 08:24:59
【问题描述】:

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

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

【问题讨论】:

    标签: oauth-2.0 dotnetopenauth servicestack


    【解决方案1】:

    只是一些更新

    我没有使用来自ServiceStack.ServiceInterfaceAuthenticateAttributeRequiredRoleAttribute

    我创建了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)

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

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2018-08-15
      • 1970-01-01
      • 2021-04-27
      • 2020-08-14
      • 2012-08-19
      • 2015-06-13
      • 1970-01-01
      • 2013-08-24
      相关资源
      最近更新 更多