当服务被指定为使用GithubAuthProvider进行身份验证时,为什么要调用ServiceStack JwtAut



首次探索ServiceStack身份验证提供程序。通过添加BasicAuthProvider逐渐建立了一个测试项目,当成功时,添加了GithubAuthProvider。最后添加的是JwtAuthProvider,它也同样有效。例如,当我使用任何以前的身份验证提供程序(如Github(重新测试身份验证时,我发现CreatePayloadFilterJwtAuthProviderlambda函数仍在调用中。这是意料之中的事。

AuthFeature插件如下:

Plugins.Add(new AuthFeature(
() => new PartnerWebSession(), 
new IAuthProvider[] {
new JwtAuthProvider(appSettings) { ... },
new BasicAuthProvider(),       //Sign-in with HTTP Basic Auth
new GithubAuthProvider(appSettings)
}));

我创建了具有不同端点的BasicHelloGithubHelloJwtHello服务模型,用于具有路由的每个身份验证提供商:

/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提供的页面。成功地进行了身份验证,然后代码执行命中了我在JwtAuthProviderCreatePayloadFilterlambda中设置的断点。

我没想到会这样。这是错误还是我做错了什么?

如果您注册了JWT AuthProvider,它会用填充的JWT令牌填充成功的Auth Response,该令牌封装了部分已验证的会话。

在OAuth登录成功后,无状态客户端JWT令牌(即代替服务器会话cookie(可用于发出经过身份验证的请求。

最新更新