1

ServiceStack首次探索身份验证提供程序。通过添加逐渐建立了一个测试项目BasicAuthProvider,当它工作时,添加GithubAuthProvider. 添加的最后一个是JwtAuthProvider并且它也有效。例如,当我使用任何以前的身份验证提供程序(例如 Github)重新测试身份验证时,我发现仍在调用JwtAuthProviderlambda 函数。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,GithubHelloJwtHello具有不同端点的服务模型,用于每个具有路由的身份验证提供程序:

/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”页面。成功验证,然后代码执行到达我CreatePayloadFilterJwtAuthProvider.

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

4

1 回答 1

0

如果您注册了 JWT AuthProvider,它会使用封装了部分经过身份验证的会话的填充 JWT 令牌填充成功的身份验证响应。

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

于 2021-07-06T06:41:31.663 回答