WebAssembly 的 IAuthenticationTokenProvider 在请求令牌时崩溃
WebAssembly's IAuthenticationTokenProvider crashes when requesting a token
我正在尝试使用 google 的 OIDC 在我的 WASM Blazor 应用程序中对用户进行身份验证。
我已经按照这篇文章设法取回了令牌:https://docs.microsoft.com/en-gb/aspnet/core/blazor/security/webassembly/standalone-with-authentication-library?view=aspnetcore-3.1&tabs=visual-studio
我正在尝试检索 AccessToken 以在构建 HubConnection 实例时使用 IAccessTokenProvider
的注入实例将其传递给 SignalR 集线器:
public RemoteCombatListener(ITokenCache tokenCache)
{
_connection = new HubConnectionBuilder()
.WithUrl("https://localhost:44364/combat", opts => {
opts.AccessTokenProvider = tokenCache.GetToken;
})
.Build();
}
这是我的 TokenCache 的实现:
public class TokenCache : ITokenCache
{
private readonly IAccessTokenProvider _tokenProvider;
private readonly NavigationManager _navManager;
public string CachedToken { get; private set; }
public TokenCache(IAccessTokenProvider tokenProvider, NavigationManager navManager)
{
_tokenProvider = tokenProvider;
_navManager = navManager;
}
public async Task<string> GetToken()
{
if (string.IsNullOrEmpty(CachedToken))
{
var requestedToken = await _tokenProvider.RequestAccessToken();
if (requestedToken.TryGetToken(out var accessToken))
{
CachedToken = accessToken.Value;
}
else
{
throw new AccessTokenNotAvailableException(_navManager, requestedToken, Enumerable.Empty<string>());
}
}
return CachedToken;
}
}
我现在面临的问题是,在调用_tokenProvider.RequestAccessToken()
方法时,出现以下异常:
An exception occurred executing JS interop: The JSON value could not be converted to System.DateTimeOffset. Path: $.token.expires | LineNumber: 0 | BytePositionInLine: 80.. See InnerException for more details.
我无法弄清楚我的设置有什么问题,因为调试随机停止为我工作,我唯一的选择是 Console.Log 调试。
事实证明,Oidc 的默认配置不请求 access_token,仅请求 id_token。必须添加以下内容:
builder.Services.AddOidcAuthentication(options => {
// Rest of configs ...
options.ProviderOptions.ResponseType = "id_token token";
});
我正在尝试使用 google 的 OIDC 在我的 WASM Blazor 应用程序中对用户进行身份验证。 我已经按照这篇文章设法取回了令牌:https://docs.microsoft.com/en-gb/aspnet/core/blazor/security/webassembly/standalone-with-authentication-library?view=aspnetcore-3.1&tabs=visual-studio
我正在尝试检索 AccessToken 以在构建 HubConnection 实例时使用 IAccessTokenProvider
的注入实例将其传递给 SignalR 集线器:
public RemoteCombatListener(ITokenCache tokenCache)
{
_connection = new HubConnectionBuilder()
.WithUrl("https://localhost:44364/combat", opts => {
opts.AccessTokenProvider = tokenCache.GetToken;
})
.Build();
}
这是我的 TokenCache 的实现:
public class TokenCache : ITokenCache
{
private readonly IAccessTokenProvider _tokenProvider;
private readonly NavigationManager _navManager;
public string CachedToken { get; private set; }
public TokenCache(IAccessTokenProvider tokenProvider, NavigationManager navManager)
{
_tokenProvider = tokenProvider;
_navManager = navManager;
}
public async Task<string> GetToken()
{
if (string.IsNullOrEmpty(CachedToken))
{
var requestedToken = await _tokenProvider.RequestAccessToken();
if (requestedToken.TryGetToken(out var accessToken))
{
CachedToken = accessToken.Value;
}
else
{
throw new AccessTokenNotAvailableException(_navManager, requestedToken, Enumerable.Empty<string>());
}
}
return CachedToken;
}
}
我现在面临的问题是,在调用_tokenProvider.RequestAccessToken()
方法时,出现以下异常:
An exception occurred executing JS interop: The JSON value could not be converted to System.DateTimeOffset. Path: $.token.expires | LineNumber: 0 | BytePositionInLine: 80.. See InnerException for more details.
我无法弄清楚我的设置有什么问题,因为调试随机停止为我工作,我唯一的选择是 Console.Log 调试。
事实证明,Oidc 的默认配置不请求 access_token,仅请求 id_token。必须添加以下内容:
builder.Services.AddOidcAuthentication(options => {
// Rest of configs ...
options.ProviderOptions.ResponseType = "id_token token";
});