Я сохранил свои клиенты для моего сервера идентификации в файле appsettings.json:
"ClientSettings": [
{
"ClientId": "TestClient1",
"RedirectUris": [ "http://localhost:5002/signin-oidc" ],
"PostLogoutRedirectUris": [ "http://localhost:5002/signout-callback-oidc" ],
"AllowedGrantTypes": [ "hybrid" ],
"AllowedScopes": [ "openid","profile","email" ],
"RequireConsent": "false",
"Enabled": "true",
"ClientSecrets": [
{
"Description": "This is the client sceret description.",
"Value": "password123"
}
]
}
],
В моем методе ConfigureServices
я настроил внедрение зависимости
services.Configure<List<Client>>(config.GetSection("ClientSettings"));
My IClientStore
получает список клиентов с помощью внедрения зависимостей.Конечно, мне нужно хешировать секрет клиента.Чтобы не усложнять этот вопрос, я написал этот код, в котором предполагается, что у меня есть только один клиент с одним клиентским секретом.
public ClientConfigFileStore(IOptions<List<Client>> options)
{
var jsonClient = options.Value[0];
Client client = new Client()
{
ClientId = jsonClient.ClientId,
RedirectUris = jsonClient.RedirectUris,
PostLogoutRedirectUris = jsonClient.PostLogoutRedirectUris,
AllowedGrantTypes = jsonClient.AllowedGrantTypes,
AllowedScopes = jsonClient.AllowedScopes,
RequireConsent = jsonClient.RequireConsent,
Enabled = jsonClient.Enabled,
};//Works
Client client = jsonClient;//Does not work
client.ClientSecrets = new List<Secret>()
{
new Secret(jsonClient.ClientSecrets.First().Value.Sha256())
};
clients = new List<Client>() { client };
}
Каким-то образом мне нужно создать новый экземпляр Client
и использовать его.созданный путем внедрения зависимости не работает.После того, как пользователь вводит свои учетные данные на сервере идентификации, перенаправление на клиент завершается с помощью Client secret validation failed for the client: TestClient1
Почему необходимо создать новый экземпляр и существует ли более элегантный способ загрузки клиентов из appsettings.json
файл