Возвращение ответа 401 на сервере OpenID Connect с ASOS - PullRequest
0 голосов
/ 27 сентября 2019

Я следовал инструкциям по Создание собственного сервера OpenID Connect с ASOS .Все работает нормально, но если пользователь введет неправильные учетные данные, он увидит 400 кодов ответа.Я хотел бы изменить этот код состояния на 401. Вот код моей версии функции HandleTokenRequest:

public override Task HandleTokenRequest(HandleTokenRequestContext context)
{
    if (context.Request.IsPasswordGrantType())
    {
        return GrantResourceOwnerCredentials(context);
    }
        return base.HandleTokenRequest(context);
}

private async Task GrantResourceOwnerCredentials(HandleTokenRequestContext context)
{
    var userService = context.HttpContext.RequestServices.GetService<IUserService>();

    var user = await userService.AuthenticateAsync(context.Request.Username, context.Request.Password);
    if (user != null)
    {
        var identity = CreatePrincipal(Mapper.Map<UserModel>(user), null);
        var ticket = new AuthenticationTicket(identity, new AuthenticationProperties(), context.Scheme.Name);
        ticket.SetScopes(Consts.Scopes.Api1, Consts.Scopes.ApiOfflineAccess);

        context.Validate(ticket);
        return;
    }
    context.Reject(error: "invalid_grant", description: "The user name or password is incorrect.");
}

Я не вижу, как передать код ответа здесь.Возможен ли такой подход?

1 Ответ

1 голос
/ 29 сентября 2019

Сделать мой комментарий ответом.Исходя из моего опыта, код статуса 400 очень типичен.

И это также в спецификации: https://openid.net/specs/openid-connect-core-1_0.html#TokenErrorResponse

Если запрос токена недействителен или не авторизован, Сервер авторизации создает ответ об ошибке.Параметры ответа об ошибке токена определены в разделе 5.2 OAuth 2.0 [RFC6749].В теле ответа HTTP используется тип носителя application / json с кодом ответа HTTP 400.

...