5

我将如何使用 ServiceStack 实现以下场景?

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

Authorization: Basic skdjflsdkfj=

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

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

Authorization: BasicToken <TokenFromPreviousSuccessfulLogin>

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

我应该如何为后续请求实现令牌验证?我应该如何实施IAuthProvider以提供令牌?我将如何注册提供者等?使用 RequestFilters 或使用AuthFeature?

4

1 回答 1

7

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

否则,BasicAuth Provider是一个非常简单的类,它只是从 BasicAuth Header 中提取 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(...)方法来执行初始验证。

于 2013-05-21T16:28:20.293 回答