【问题标题】:Verifying session still valid with IdentityModel/IdentityServer4使用 IdentityModel/IdentityServer4 验证会话仍然有效
【发布时间】:2021-11-26 06:40:06
【问题描述】:

我无法让 IdentityModel 验证令牌是否仍有有效会话。这是我的客户代码。 _httpHttpClient 的一个实例。

不要因为在这种情况下使用用户名/密码而评判我。这是一个受信任的应用程序,我首先从更简单的场景开始,然后计划转向混合模型。

var discovery ??= await _http.GetDiscoveryDocumentAsync("http://localhost:5000");
var response = await _http.RequestPasswordTokenAsync(new PasswordTokenRequest
            {
                Address = discovery.TokenEndpoint,
                ClientId = ClientId,
                ClientSecret = ClientSecret,
                Scope = "api1",
                UserName = "test",
                Password = "test"
            }); // This succeeds while returning an AccessToken
var introspectionResponse = await _http.IntrospectTokenAsync(new TokenIntrospectionRequest
            {
                Address = discovery.IntrospectionEndpoint,
                ClientId = ClientId,
                ClientSecret = ClientSecret,
                Token = response.AccessToken
            }); // This fails with an unauthenticated error

【问题讨论】:

    标签: c# .net identityserver4 identitymodel


    【解决方案1】:

    我在这里最好的猜测是它一定是一个参考令牌流。这有点令人困惑。而这里的混淆是ClientIdClientSecret

    1. 您在创建AccessToken 时提供的ClientIdClientSecret 是最终用户的ClientIdClientSecret

    2. 您在自省AccessToken 时提供的ClientIdClientSecret 应该是您资源的Name 并且它是Secret不是最终用户ClientIdClientSecret

    IdentityServer 中,自省端点的客户端是 API 或资源,而不是最终用户。阅读完整的文档here

    在您的情况下,将api1 传递为ClientId 并将api1 的秘密传递为ClientSecret,同时自省AccessToken。它应该可以工作。

    【讨论】:

    • 谢谢!这让我更接近了。现在令牌签出,但 IsActive 属性始终为 false。
    • 我明白了。我需要将范围添加到 API 资源服务器端。仍在尝试在这里掌握术语。
    猜你喜欢
    • 2019-07-26
    • 2013-06-24
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2018-06-30
    • 2014-02-21
    • 2015-10-12
    相关资源
    最近更新 更多