【问题标题】:IdentityServer4 impersonating a user from .Net core appIdentityServer4 模拟来自 .Net 核心应用程序的用户
【发布时间】:2021-06-16 00:03:54
【问题描述】:

我有一个作为后台任务运行的 .Net 核心应用程序。我希望能够代表用户调用我的网络服务器来处理它的数据(我想这将被归类为用户模拟)。

我的网络服务器使用 IdentityServer4,我可以使用中的代码对应用程序进行身份验证

https://identitymodel.readthedocs.io/en/latest/client/token.html

总而言之,定义客户端服务器端

    new Client
    {
        ClientId = "client",

        // no interactive user, use the clientid/secret for authentication
        AllowedGrantTypes = GrantTypes.ClientCredentials,

        // secret for authentication
        ClientSecrets =
        {
            new Secret("secret".Sha256())
        },

        // scopes that client has access to
        AllowedScopes = { "api1" }
    }

创建身份验证令牌客户端并在 http 调用中使用

var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync("https://localhost:5001");
var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
    Address = disco.TokenEndpoint,

    ClientId = "client",
    ClientSecret = "secret",
    Scope = "api1"
});
var apiClient = new HttpClient();
apiClient.SetBearerToken(tokenResponse.AccessToken);
...

这可行,但是当我使用不记名令牌时,我已通过身份验证,但它不是登录其没有声明的“客户端”的“用户”。

那么我如何获得一个不记名令牌,其中包含我需要在服务器上模拟用户的声明?

【问题讨论】:

    标签: jwt identityserver4


    【解决方案1】:

    您需要使用授权代码流而不是客户端凭据流来获取所需用户的令牌。然后,您将该令牌保存在本地,并使用它代表用户访问 API。

    如果您有短期令牌,您可以请求刷新令牌,以便在过期时获得新的访问令牌。

    客户端凭据流仅用于不涉及用户的机器对机器通信。

    【讨论】:

    • 如果我使用代码流,我该如何获取令牌,我猜是通过 RequestAuthorizationCodeTokenAsync,但是我如何指定我想要模拟的用户?
    • 使用授权代码流程,您可以让用户登录。如果您想冒充没有登录的其他人,那么由您自己进行破解,据我所知,这种情况没有“流程”或内置流程。还是您必须创建自己的令牌?
    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多