如何在 blazor Web 程序集中获取 id_token

Rob*_*bie 2 openid-connect asp.net-core blazor blazor-webassembly

我有一个带有 oidc 身份验证的 Blazor WebAssembly(最新的 3.2.0)应用程序。asp.net 身份验证提供了一种获取 accessToken 的方法,但看不到任何方法来访问我的场景所需的 id_token (jwt)。我可以在浏览器的本地存储中看到 id_token。访问它的最佳方式是什么?

谢谢

agu*_*ars 5

您可以使用 JSInterop 从会话存储中读取它,它存储在键oidc.user:{app baseUri}:{app client id}

@inject IJSRuntime JSRuntime
@inject NavigationManager NavigationManager
...
@code {
     private async Task<string> ReadIdToken()
     {
          const string clientId = "your oidc client id";
          var userDataKey = $"oidc.user:{NavigationManager.BaseUri}:{clientId}";
          var userData = await JSRuntime.InvokeAsync<UserData>("sessionStorage.getItem", userDataKey);
          return userData.id_token;          
     }

     class UserData
     {
         public string id_token { get; set; }
         public int expires_at { get; set; }
     }
}
Run Code Online (Sandbox Code Playgroud)