如何使用ServiceStack进行基于令牌的身份验证

Ale*_*ler 5 authentication basic-authentication servicestack

如何使用ServiceStack实现以下方案?

初始请求http://localhost/auth具有如下定义的Authorization标头:

Authorization: Basic skdjflsdkfj=

IAuthProvider实现针对用户存储进行验证,并将会话令牌作为响应主体(JSON)返回.

客户端使用此令牌,将其与后续请求重新发送,例如http://localhost/json/reply/orders使用Authorization标头,如下所示:

Authorization: BasicToken <TokenFromPreviousSuccessfulLogin>

使用AuthenticateAttribute我想标记我的服务以使用身份验证.

我应该如何为后续请求实现令牌验证?我该如何实现IAuthProvider提供令牌?我如何注册提供商等?使用RequestFilters还是使用AuthFeature

myt*_*thz 7

ServiceStack的JWT AuthProviderAPI Key AuthProvider都使用基于令牌的身份验证.

否则,BasicAuth提供程序是一个非常简单的类,只需从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);
}
Run Code Online (Sandbox Code Playgroud)

如果你想提供增强的行为,我只是继承这个类检查Authorization: BasicToken头,如果它存在使用,否则调用该base.Authenticate(...)方法来执行初始验证.