【发布时间】: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