servicestack,basic-authentication,Authentication,servicestack,Basic Authentication" /> servicestack,basic-authentication,Authentication,servicestack,Basic Authentication" />

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

Authentication 如何使用ServiceStack进行基于令牌的身份验证,authentication,servicestack,basic-authentication,Authentication,servicestack,Basic Authentication,如何使用ServiceStack实现以下场景 初始请求转到http://localhost/auth具有如下定义的授权标头: 授权:基本skdjflsdkfj= IAuthProvider实现根据用户存储进行验证,并将会话令牌作为响应体(JSON)返回 客户端使用此令牌,然后根据后续请求(如http://localhost/json/reply/orders使用如下授权标题: 授权:BasicToken 使用AuthenticateAttribute我想标记我的服务以使用身份验证 我应该如何为后

如何使用ServiceStack实现以下场景

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

授权:基本skdjflsdkfj=

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

客户端使用此令牌,然后根据后续请求(如
http://localhost/json/reply/orders
使用如下授权标题:

授权:BasicToken

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

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

ServiceStack,两者都使用基于令牌的身份验证

否则,是一个非常简单的类,只需从BasicAuth头中提取用户名和密码并对其求值:

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);
}
公共覆盖对象身份验证(…)
{
var httpReq=authService.RequestContext.Get();
var basicAuth=httpReq.GetBasicAuthUserAndPassword();
if(basicAuth==null)
抛出HttpError.Unauthorized(“无效的基本凭据”);
var userName=basicAuth.Value.Key;
var password=basicAuth.Value.Value;
返回身份验证(authService、会话、用户名、密码、请求。继续);
}

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

感谢您的回复。这个问题是针对所描述的场景而提出的。@mythz我一直在努力做到这一点,但您不能在基类上设置提供程序名称或领域,因为BasicAuthProvider不允许您在构造函数中设置它们。@Junto这是什么意思?如果我从BasicAuthProvider继承,构造函数
public BasicAuthProvider(IAppSettings-appSettings):base(appSettings,Realm,Name){}
覆盖“/auth/basic”和“basic”的基本设置。因此,我无法做到这一点:
public MyCustomAuthProvider(IResourceManager appSettings):base(appSettings,“/auth/mycustomauth”,“mycustomauth”)
@mythz我通过继承
CredentialAuthProvider
绕过了它。顺便说一句,我不需要在请求中传递任何凭据,但不管怎么说,这似乎是可行的。