如何从 Cookie 中检索 OpenID Connect 身份令牌

本文关键字:OpenID Connect 身份 令牌 检索 Cookie | 更新日期: 2023-09-27 17:56:53

如何从Microsoft基于 OWIN 的中间件生成的 cookie 中检索 OpenID 连接令牌?

我正在使用Microsoft.Owin.Security.CookiesMicrosoft.Owin.Security.OpenIdConnect使用"隐式流"来保护网站。 有时我认为我可能能够更好地理解事情或能够进行故障排除,我可以检查"原始"令牌而不是从中生成的对象模型。

我了解信息是通过 Cookie 存储的,但尚未找到如何从 Cookie 中检索令牌。 这是一个开发环境,因此我应该有权访问所需的任何证书/机密。

我知道令牌应该有 3 个由句点分隔的段:{header}.{claims}.{signature} .如果我能找到令牌,我了解到我可以使用 jwt.io 来查看内容。 但是,我的 cookie 都没有与该格式匹配的内容。

这是我使用的中间件配置:

app.SetDefaultSignInAsAuthenticationType( CookieAuthenticationDefaults.AuthenticationType );
app.UseCookieAuthentication( new CookieAuthenticationOptions() );
app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
        {
        ClientId = clientId,
        Authority = stsAuthority,
        RedirectUri = baseHostingPath,
        ResponseType = "id_token",
        Scope = string.Join( " ", "openid", "profile", "email" )
        } );

如何从 Cookie 中检索 OpenID Connect 身份令牌

如果您想仅在调试时执行此操作,我建议您尝试 https://github.com/vibronet/OInspector/tree/dev - 它可以帮助您检查 Fiddler 中的令牌。

如果要在代码中执行此操作,可以确保原始令牌保存在 ClaimPrincipal 中

  • 添加

    TokenValidationParameters = new TokenValidationParameters
    { 
        SaveSigninToken = true 
    }
    

    到选项初始化

  • 通过某些东西检索令牌,大意是

    var ci = (System.Security.Claims.ClaimsIdentity)
                 ClaimsPrincipal.Current.Identity;
    string token = ((System.IdentityModel.Tokens.BootstrapContext)
                       ci.BootstrapContext).Token;