是否有任何(或将有)内置支持以声明方式保护(即使用属性)oAuth2 的 REST 服务?
我想指定我的 SS Web 服务的 REST 服务只能由客户端访问,前提是他们在对服务的请求中指定了 oAuth2 'Authorization' 标头。
我不希望我的服务向我的客户提供身份验证(即没有 AuthFeature)。客户需要已经使用 oAuth 服务(即 facebook 等)进行身份验证。
是否有任何(或将有)内置支持以声明方式保护(即使用属性)oAuth2 的 REST 服务?
我想指定我的 SS Web 服务的 REST 服务只能由客户端访问,前提是他们在对服务的请求中指定了 oAuth2 'Authorization' 标头。
我不希望我的服务向我的客户提供身份验证(即没有 AuthFeature)。客户需要已经使用 oAuth 服务(即 facebook 等)进行身份验证。
在您的服务上使用该[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 文档。
您还可以通过全局请求过滤器或选择加入请求过滤器属性来强制执行客户端请求的特定要求,例如:
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();
}
});
与此相关的还有安全文档描述了如何使用该[Restrict]
属性以声明方式限制服务。