首次探索ServiceStack
身份验证提供程序。通过添加BasicAuthProvider
逐渐建立了一个测试项目,当成功时,添加了GithubAuthProvider
。最后添加的是JwtAuthProvider
,它也同样有效。例如,当我使用任何以前的身份验证提供程序(如Github(重新测试身份验证时,我发现CreatePayloadFilter
的JwtAuthProvider
lambda函数仍在调用中。这是意料之中的事。
AuthFeature
插件如下:
Plugins.Add(new AuthFeature(
() => new PartnerWebSession(),
new IAuthProvider[] {
new JwtAuthProvider(appSettings) { ... },
new BasicAuthProvider(), //Sign-in with HTTP Basic Auth
new GithubAuthProvider(appSettings)
}));
我创建了具有不同端点的BasicHello
、GithubHello
和JwtHello
服务模型,用于具有路由的每个身份验证提供商:
/basic/{Name}
/github/{Name}
/jwt/{Name}
AuthenticateAttribute
已附加到设计用于这些模型的Service
类,它们分别指定要使用的提供者,例如:
[Authenticate(Provider = "basic")]
public class BasicAuthentication : Service
{
public object Any(BasicHello request)
{
return new BasicHelloResponse { Result = $"{nameof(BasicAuthentication)} says Hello, {request.Name}!" };
}
}
使用Visual Studio调试和Chrome浏览器进行测试。通过始终清除cookie,确保JWT之前的测试中没有任何cookie。我输入URL:
http://localhost:52070/api/github?name=stephen
这将我带到ServiceStack呈现的具有登录对话框的认证屏幕;使用Github登录";按钮单击";使用Github登录";按钮,它把我带到";登录GitHub";GitHub提供的页面。成功地进行了身份验证,然后代码执行命中了我在JwtAuthProvider
的CreatePayloadFilter
lambda中设置的断点。
我没想到会这样。这是错误还是我做错了什么?
如果您注册了JWT AuthProvider,它会用填充的JWT令牌填充成功的Auth Response,该令牌封装了部分已验证的会话。
在OAuth登录成功后,无状态客户端JWT令牌(即代替服务器会话cookie(可用于发出经过身份验证的请求。