IdentityServer4 Самостоятельный мультитенантный запрос - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь использовать образец Introspection, доступный здесь , чтобы отправить арендатора в запросе

var client = new HttpClient();
var tokenRequest = new PasswordTokenRequest {
    Address = disco.TokenEndpoint,
    ClientId = "roclient.reference",
    ClientSecret = "secret",
    UserName = "user",
    Password = "password",
    Scope = "api1 api2.read_only"
};
tokenRequest.Parameters.Add( "acr_values", "tenant:mytenant" );
var response = await client.RequestPasswordTokenAsync( tokenRequest );

Однако параметр арендатора всегда равен нулю на стороне сервера, как вы можете видетьиз следующего журнала

    [09:54:02 INF] User authentication failed: ["invalid_username_or_password"], request details: 
{
    "ClientId": "roclient.reference", 
    "ClientName": "Introspection Client Sample", 
    "GrantType": "password", 
    "Scopes": "api1 api2.read_only", 
    "AuthorizationCode": null, 
    "RefreshToken": null, 
    "UserName": "user", 
    "AuthenticationContextReferenceClasses": null, 
    "Tenant": null, 
    "IdP": null, 
    "Raw": {"acr_values": "tenant:mytenant", "grant_type": "password", "username": "user", "password": "***REDACTED***", "scope": "api1 api2.read_only", "client_id": "roclient.reference", "client_secret": "***REDACTED***"}, 
    "$type": "TokenRequestValidationLog"
}

Как правильно отправить параметр арендатора в запросе?

1 Ответ

0 голосов
/ 15 февраля 2019

Вы делаете это правильно, но IdentityServer не анализирует автоматически значения acr_values ​​в запросе токена.В зависимости от того, что вы хотели бы сделать, вы можете создать и зарегистрировать реализацию ICustomTokenRequestValidator для выполнения специальных действий при получении определенных значений acr_values.Документы заставили бы поверить, что в противном случае , но я думаю, что это всего лишь результат задания копирования-вставки, которое приводит к опечатке (почти то же самое говорит об acrs на конечной точке авторизации ).page ).

Чтобы убедиться в этом, вы можете взглянуть на конечную точку токена , которая вызывает средство проверки запроса токена перед генерациейответ с помощью генератора ответов токена .Если вы сравните TokenRequestValidator с AuthorizeRequestValidator , вы быстро заметите, что он не обрабатывает acr_values ​​по-разному (просто ctrl-f 'acr' на каждой странице).

...