是否有任何(或将会是)内置支持为oAuth2声明性地保护(即使用属性)REST服务?
我想指定我的SS Web服务的REST服务只有在客户端对服务的请求中指定oAuth2'Authorization'标头时才能访问它。
我不希望我的服务为我的客户端提供身份验证(即没有AuthFeature)。客户需要使用oAuth服务(即facebook等)进行身份验证。
答案 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]
属性声明性地限制服务。