ServiceStack的授权扩展

时间:2013-10-06 08:33:12

标签: servicestack

是否有任何(或将会是)内置支持为oAuth2声明性地保护(即使用属性)REST服务?

我想指定我的SS Web服务的REST服务只有在客户端对服务的请求中指定oAuth2'Authorization'标头时才能访问它。

我不希望我的服务为我的客户端提供身份验证(即没有AuthFeature)。客户需要使用oAuth服务(即facebook等)进行身份验证。

1 个答案:

答案 0 :(得分:1)

使用服务上的[Authenticate]属性可确保只有经过身份验证的客户端才能访问。

Authentication wiki解释了如何初始化ServiceStack的内置 AuthFeature ,以仅指定您希望客户端进行身份验证的提供程序,例如:您可以确保客户只能使用 LinkedIn Google OAuth2提供商进行身份验证:

var appSettings = new AppSettings();            //Access Web.Config AppSettings
Plugins.Add(new AuthFeature(() => new CustomUserSession(), 
  new IAuthProvider[] {
    new GoogleOAuth2Provider(appSettings),      //Sign-in with Goolge OAuth2        
    new LinkedInOAuth2Provider(appSettings),    //Sign-in with LinkedIn OAuth2        
}));

注意:OAuth2需要额外的ServiceStack.Authentication.OAuth2 NuGet包和Web.Config设置,有关详细信息,请参阅Auth docs

使用请求过滤器

您还可以Global Request Filter或选择加入Request Filter Attributes对客户请求强制执行特定要求,例如:

this.RequestFilters.Add((httpReq, httpRes, requestDto) => {
    var authHeader = httpReq.Headers[HttpHeaders.Authorization];
    if (!IsValidAuthHeader(authHeader)) {
        httpRes.StatusCode = (int)HttpStatusCode.Unauthorized;
        httpRes.StatusDescription = "Authentication is required";
        httpRes.EndRequest();
    }
});

更多服务限制

同样相关的是Security文档介绍了如何使用[Restrict]属性声明性地限制服务。