如何使用ServiceStack实现以下场景?
初始请求转到http://localhost/auth
,其授权标头定义如下:
Authorization: Basic skdjflsdkfj=
IAuthProvider实现针对用户存储进行验证,并将会话令牌作为响应主体(JSON)返回。
客户端使用此令牌,使用Authorization标头对http://localhost/json/reply/orders
之后的请求进行重新发送,如下所示:
Authorization: BasicToken <TokenFromPreviousSuccessfulLogin>
使用AuthenticateAttribute
我想标记我的服务以使用身份验证。
如何为后续请求实现令牌验证?
我应该如何实现IAuthProvider
来提供令牌?
我如何注册提供商等?使用RequestFilters或使用AuthFeature
?
答案 0 :(得分:7)
ServiceStack的JWT AuthProvider和API Key AuthProvider都使用基于令牌的身份验证。
否则BasicAuth Provider是一个非常简单的类,它只是从BasicAuth标题中提取UserName和Password并对其进行评估:
public override object Authenticate(...)
{
var httpReq = authService.RequestContext.Get<IHttpRequest>();
var basicAuth = httpReq.GetBasicAuthUserAndPassword();
if (basicAuth == null)
throw HttpError.Unauthorized("Invalid BasicAuth credentials");
var userName = basicAuth.Value.Key;
var password = basicAuth.Value.Value;
return Authenticate(authService, session, userName, password, request.Continue);
}
如果你想提供增强的行为,我只是继承这个类检查Authorization: BasicToken
标头,如果它存在则使用,否则调用base.Authenticate(...)
方法来执行初始验证。