Я пытаюсь выяснить, как реализовать тип предоставления delegation
в сочетании с client credentials
, следуя учебному пособию из ЗДЕСЬ , которое является буквально одной страницей, поскольку у меня есть ресурс API1вызов другого ресурса API2.
Я реализовал IExtensionGrantValidator
, скопировал код из документов, используя предоставленное ими имя класса, и добавил client
с типом предоставления delegation
. Однако я не уверен, где и как вызвать этот метод ниже, сначала я вызывал его из client
и пытался передать JWT, который я первоначально получил для вызова API1, в метод DelegateAsync
, но я продолжал получать bad request
В API 1 теперь вы можете создать полезную нагрузку HTTP самостоятельно или использовать вспомогательную библиотеку IdentityModel:
public async Task<TokenResponse> DelegateAsync(string userToken)
{
var payload = new
{
token = userToken
};
// create token client
var client = new TokenClient(disco.TokenEndpoint, "api1.client", "secret");
// send custom grant to token endpoint, return response
return await client.RequestCustomGrantAsync("delegation", "api2", payload);
}
Итак, я попытался из API1 запросить токенв методе с именем GetAPI2Response
, который пытается вызвать метод в API2:
[HttpGet]
[Route("getapi2response")]
public async Task<string> GetApi2Response()
{
var client = new HttpClient();
var tokenResponse = await client.RequestTokenAsync(new TokenRequest
{
Address = "http://localhost:5005/connect/token",
GrantType = "delegation",
ClientId = "api1_client",
ClientSecret = "74c4148e-70f4-4fd9-b444-03002b177937",
Parameters = { { "scope", "stateapi" } }
});
var apiClient = new HttpClient();
apiClient.SetBearerToken(tokenResponse.AccessToken);
var response = await apiClient.GetAsync("http://localhost:6050/api/values");
if (!response.IsSuccessStatusCode)
{
Debug.WriteLine(response.StatusCode);
}
else
{
var content = await response.Content.ReadAsStringAsync();
return content;
}
return "failed";
}
Однако это возвращается при отладке invalid grant type
. Как ни странно, я заметил, что при запуске IDSRV код в методе IExtensionGrantValidator
не срабатывает, пока вы не нажмете ссылку для discovery docs
, тогда она отобразится как grant type
Я, очевидно, что-то делаюнеправильно, поскольку я не включил вышеупомянутый DelegateAsync
метод из документации, так как мне не ясно, куда он идет.