【发布时间】:2022-02-17 17:12:32
【问题描述】:
我从 ServiceStack web 下载了 .NET6 项目模板,摆弄了一下并使用 CredentialAuthProvider 成功设置了身份验证。但是,当添加 JwtAuthProvider 时,它不会返回预期的令牌(承载和刷新) ~ 在 PostMan 和 ServiceStack API Explorer 中都进行了测试。它总是返回与 CredentialAuthProvider 的响应相同的响应,如下所示:
{
"userId": "1",
"sessionId": "MLheS29QdaaynocpNYLN",
"userName": "admin@email.com",
"displayName": "Admin User",
"profileUrl": "...",
"roles": ["Admin"],
"permissions": []
}
这是我的 AuthFeature 设置:
var privateKey = RsaUtils.CreatePrivateKeyParams(RsaKeyLengths.Bit2048);
appHost.Plugins.Add(new AuthFeature(() => new CustomUserSession(),
new IAuthProvider[] {
new JwtAuthProvider(appSettings)
{
HashAlgorithm = "RS256",
PrivateKeyXml = privateKey.ToPrivateKeyXml(),
RequireSecureConnection = false,
SetBearerTokenOnAuthenticateResponse = true,
},
new CredentialsAuthProvider(appSettings), /* Sign In with Username / Password credentials */
}));
为了测试令牌的数量,我使用下面的 DummyAuthProvider 并将其添加到 IAuthProvider 数组中:
public class DummyAuthProvider : AuthProvider, IAuthResponseFilter
{
public DummyAuthProvider() => Provider = "dummy";
public Task ExecuteAsync(AuthFilterContext authContext)
{
//throw new NotImplementedException();
var jwt = (JwtAuthProvider)AuthenticateService.GetJwtAuthProvider();
var session = authContext.Session;
var authService = authContext.AuthService;
var shouldReturnTokens = authContext.DidAuthenticate;
if (shouldReturnTokens && jwt.SetBearerTokenOnAuthenticateResponse && session.IsAuthenticated)
{
if (!jwt.RequireSecureConnection || authService.Request.IsSecureConnection)
{
//... will populate jwt tokens
}
}
//.. wont populate jwt tokens
return Task.CompletedTask;
}
}
结果是它实际上填充了 jwt 令牌。但是 API 响应不包括填充的令牌。
非常感谢您对此的任何见解。
【问题讨论】:
标签: authentication jwt servicestack