Вход в Microsoft работает без URL-адреса перенаправления - PullRequest
1 голос
/ 07 мая 2020

Когда я вхожу в систему с помощью Microsoft OAuth в моем приложении Blazor, AuthenticateResult.Succeeded истинно, даже если я не указываю URI перенаправления. Это не соответствует требованиям Google , если я не добавлю свой URI в клиент OAuth.

Imo, он не должен работать без этого URI перенаправления, согласно спецификации OAuth2.0. c:

Сервер авторизации ДОЛЖЕН требовать publi c клиентов и ДОЛЖЕН требовать, чтобы конфиденциальные клиенты регистрировали свои URI перенаправления.

Я использую Microsoft.AspNetCore.Authentication.MicrosoftAccount 3.0.3 с. NET Core 3.0

public class ExternalLoginModel : PageModel
{
    public IActionResult OnGetAsync(string externalAuthType, string returnUrl)
    {
        var authenticationProperties = new AuthenticationProperties
        {
            RedirectUri = Url.Page("./externallogin",
            pageHandler: "Callback",
            values: new { returnUrl }),
        };

        return new ChallengeResult(externalAuthType, authenticationProperties);
    }

    public async Task<IActionResult> OnGetCallbackAsync(
        string returnUrl = null, string remoteError = null)
    {
        var authenticateResult = await HttpContext.AuthenticateAsync("External");

        if (!authenticateResult.Succeeded) // Should be false for Microsoft sign in
            return BadRequest();

        ...

        return LocalRedirect(returnUrl);
    }
}

Со следующим добавлением в мой автозагрузку:

        services.AddAuthentication(o =>
        {
            o.DefaultSignInScheme = "External";
        }).AddCookie("External");
        services.AddAuthentication().AddGoogle(google =>
        {
            google.ClientId = Configuration["Authentication:Google:ClientId"];
            google.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
        });
        services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
        {
            microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
            microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
        });

Настройки аутентификации моего приложения выглядят следующим образом (на самом деле я использую localhost: 12345 в настройках, но это не то, на чем работает мое приложение ..): enter image description here

enter image description here

По иронии судьбы последнее предложение может объяснить это, но я даже не знаю, какой поток использует библиотека MicrosoftAccount , и я получаю только generi c документация при поиске в Google.

1 Ответ

0 голосов
/ 12 мая 2020

Он не работает должным образом при использовании совершенно другого домена, а не localhost с другими портами. Думаю, этого достаточно.

Кроме того, я снял флажки «Идентификационный токен» и «Рассматривать приложение как клиент publi c», поэтому, насколько я понимаю, следует использовать поток кода авторизации .

...