ServiceStack
首次探索身份验证提供程序。通过添加逐渐建立了一个测试项目BasicAuthProvider
,当它工作时,添加GithubAuthProvider
. 添加的最后一个是JwtAuthProvider
并且它也有效。例如,当我使用任何以前的身份验证提供程序(例如 Github)重新测试身份验证时,我发现仍在调用JwtAuthProvider
lambda 函数。CreatePayloadFilter
这是没有预料到的。
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,确保没有以前的 cookie JWT 挂在以前的测试中。我输入网址:
http://localhost:52070/api/github?name=stephen
这会将我带到带有登录对话框和“使用 Github 登录”按钮的 ServiceStack 呈现的身份验证屏幕。单击“使用 Github 登录”按钮,我将进入 GitHub 提供的“登录 GitHub”页面。成功验证,然后代码执行到达我CreatePayloadFilter
在JwtAuthProvider
.
我没想到会这样。这是一个错误还是我做错了什么?