我從 ServiceStack Web 下載了 .NET6 專案模板,擺弄并使用 CredentialAuthProvider 成功設定了身份驗證。但是,當添加JwtAuthProvider時,它不會回傳預期的令牌(承載和重繪 ) ~ 在 PostMan 和 ServiceStack API Explorer 中都進行了測驗。它總是回傳與 CredentialAuthProvider 的回應相同的回應,如下所示:
{
"userId": "1",
"sessionId": "MLheS29QdaaynocpNYLN",
"userName": "[email protected]",
"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 tokens。但是 API 回應不包括填充的令牌。
對此的任何見解都非常感謝。
uj5u.com熱心網友回復:
請閱讀最新 ServiceStack v6 版本中的 JWT 更改,其中 JWT 默認在 HttpOnly Secure ss-tokCookie 中回傳。
您可以通過以下方式在回應正文中恢復為 JWT 回傳承載/重繪 令牌:
new JwtAuthProvider(AppSettings) {
UseTokenCookie = false
},
但是,我建議使用默認 cookie,因為它能夠提供改進的透明 JWT 令牌處理,經過身份驗證的客戶端會自動為每個請求重新發送 JWT 令牌 cookie。由于它的作業方式與普通會話 Cookie 一樣,它可以讓您的服務器切換到使用無狀態 JWT Cookie,而無需更新現有的客戶端身份驗證。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/426503.html
