【发布时间】:2018-10-05 17:52:05
【问题描述】:
我遵循几个教程和 IdentityServer4 文档及其术语:Terminology 但我不明白哪个端点为用户获取 id 令牌。 我想我可以改变现有的方式来获得访问令牌来获取 id 令牌,但是没有一个方法给出结果:
var disco = new DiscoveryClient("http://localhost:55678");
var discoResponse = disco.GetAsync().Result;
if (discoResponse.IsError)
{
return null;
}
var tokenClient = new TokenClient(discoResponse.TokenEndpoint, "mvc", "secret");
var tokenResponse = tokenClient.RequestResourceOwnerPasswordAsync(context.EmailAddress, context.Password, "email");
var token = tokenResponse.Result;
我了解resourceownerpassword方式仅用于使用密码访问资源,不用于识别用户。
当我尝试配置我的 jwtendpoint 时,我想我可以询问一个 id 令牌但没有结果:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(opts =>
{
opts.Authority = "http://localhost:55678/";
opts.Audience = "api1";
opts.RequireHttpsMetadata = false;
opts.SaveToken = true;
});
我不知道哪个端点用户获取 jwt id 令牌。
【问题讨论】:
-
您是否遇到任何错误?如果
discoResponse.IsError返回 null 但不输出任何信息。那是代码被破坏的地方吗?您应该检查discoResponse.Error和tokenResponse.Error- 这可能会让您了解问题所在。 -
没有错误,我调试并且发现点没问题,但我真正的问题是我得到 access_token 而不是 id_token 是空的。
-
只是出于好奇——为什么要授予资源所有者密码?
-
因为我想为使用密码的用户授予访问权限....
-
用户名/密码也可用于其他流程:“...一般建议是使用隐式或混合等交互式流程来代替用户身份验证。”来自docs.identityserver.io/en/release/topics/…
标签: c# jwt token identityserver4 c#-2.0