У меня есть ASP. net основной проект IdentityServer4 со следующей конфигурацией:
Startup.cs:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryIdentityResources(InMemoryConfiguration.IdentityResources())
.AddTestUsers(InMemoryConfiguration.TestUsers().ToList())
.AddInMemoryClients(InMemoryConfiguration.Clients())
.AddInMemoryApiResources(InMemoryConfiguration.ApiResources());
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseIdentityServer();
}
}
InMemoryConfiguration. cs:
public class InMemoryConfiguration
{
public static IEnumerable<ApiResource> ApiResources()
{
return new[]
{
new ApiResource("main", "main")
{
UserClaims = new List<string>{ClaimTypes.Email}
},
};
}
public static IEnumerable<IdentityResource> IdentityResources()
{
return new IdentityResource[]
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
};
}
public static IEnumerable<Client> Clients()
{
return new[]
{
new Client
{
ClientId = "mainclient",
ClientSecrets = new[] {new Secret("secret".Sha256())},
AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,
AllowedScopes = new[]
{
"main",
// IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
// IdentityServerConstants.StandardScopes.Email
IdentityServerConstants.StandardScopes.OfflineAccess
},
AllowOfflineAccess = true,
RefreshTokenUsage = TokenUsage.OneTimeOnly,
RefreshTokenExpiration = TokenExpiration.Sliding,
},
new Client
{
ClientId = "apiclient",
ClientSecrets = new[] {new Secret("secret".Sha256())},
AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,
AllowedScopes = new[] {"main",IdentityServerConstants.StandardScopes.OfflineAccess},
}
};
}
public static IEnumerable<TestUser> TestUsers()
{
return new[]
{
new TestUser
{
SubjectId = "1",
Username = "jvanhoye@hotmail.com",
Password = "pass",
Claims = new List<Claim>{new Claim(ClaimTypes.Email,"jvanhoye@hotmail.com55")}
}
};
}
}
Затем я использую Почтальон для получения токена доступа: Экран Почтальона A
Но когда я пытаюсь обновить sh, используя его по ссылке sh токен из предыдущего запроса я получаю 'Invalid_grant': Экран почтальона B
Кто-нибудь, кто знает, что я делаю неправильно?