.Net-Core встроенный поток кода авторизации - PullRequest
0 голосов
/ 22 января 2019

Я работаю над упрощением процесса входа в систему для моего приложения. Превосходно использовал IdentityServer для входа в систему, но мне не нужен весь токен-сервер, поэтому я сейчас в процессе понижения, чтобы просто использовать Asp.Net Identity.

До того, как я смогу войти в систему через третьих лиц, выполните следующие действия:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
    // Request a redirect to the external login provider.
    var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
    var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
    return Challenge(properties, provider);
}

Это позволило мне войти в систему с третьими лицами, такими как (Coinbase), но я не понимаю, как это работает, потому что я не вижу места, где они получают код авторизации.

Я получил код авторизации от моего провайдера oauth, и теперь мне нужно получить токены доступа. Я легко могу сделать это вручную, например, запрос

POST /oauth/token HTTP/1.1
Host: authorization-server.com

grant_type=authorization_code
&code=xxxxxxxxxxx
&redirect_uri=https://example-app.com/redirect
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx

Но я чувствую, что в .net есть некоторые встроенные функции для выполнения этого запроса и сохранения токенов в диспетчере пользователей. Кто-нибудь знает встроенный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Оказывается, я перестал думать.Я могу использовать тех же OAuth-провайдеров, которые я настроил в Identity Server, и перенести их на мой .Net-Core Project, затем я могу использовать те же методы входа в систему

[HttpPost]
[AllowAnonymous]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
    // Request a redirect to the external login provider.
    var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
    var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
    return Challenge(properties, provider);
}

, чтобы бросить вызов единственному, что мне нужноdo in angular - это предоставить форму, которая вызовет мой метод внешнего входа в систему:

<form #form method="post" class="form-horizontal" action="https://localhost:44370/Account/ExternalLogin">
    <div>
        <p>
            <button ion-button block [disabled]="isDisabled" (click)="form.submit()" type="submit" title="Log in using your Coinbase account">
                Coinbase
            </button>
            <input type="hidden" name="provider" value="Coinbase">
        </p>
    </div>
</form>
0 голосов
/ 22 января 2019

Я бы порекомендовал придерживаться пакета Nuget Identity Server для аутентификации клиента, даже если вам не нужен сервер.

Он предоставляет функции, на которые вы ссылаетесь под капотом, для обработки различных потоков OATH, поэтому вам не нужно реализовывать их самостоятельно.

В противном случае вам придется вручную запрашивать между вашимиваш клиент, ваше серверное приложение и сервис, с которым вы аутентифицируетесь.Это может сделать довольно сложным в зависимости от ваших потребностей.

Используя пакет Nuget, вы можете подключить внешнего провайдера аутентификации, используя OpenID Connect, будь то Coinbase или какой-либо другой сервис, с помощью всего лишь нескольких строк кода путем внедрения зависимостей.

Оттуда вы можете обработать обратный вызов и подписать пользователя в .

Для получения дополнительной информации, проверьте Вход в систему с внешними поставщиками удостоверений и Добавление поддержки внешней аутентификации страниц в официальных документах Identity Server.

По умолчанию удостоверение Asp.Net будет обрабатывать обратный вызов в локальной конечной точке '/ account / ExternalLogin',Если вам нужна пользовательская функциональность, вы можете создать эту страницу из базового RCL и настроить ее.

...