繁体   English   中英

.Net-Core内置授权码流

[英].Net-Core built in Authorization Code Flow

我正在为我的应用程序简化登录过程。 抢先使用了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中有一些内置功能可以执行此请求并将令牌存储在用户管理器中。 有谁知道这样做的内置方式?

我建议即使您不需要服务器,也要坚持使用Identity Server Nuget软件包进行客户端身份验证。

它提供了您要使用的功能来处理各种OATH流,因此您不必自己实现它们。

否则,您将必须在客户端,服务器端应用程序和要进行身份验证的服务之间手动请求。 根据您的需要,这可能会变得非常复杂

使用Nuget软件包,您可以使用OpenID Connect(无论是Coinbase还是其他服务)通过依赖注入通过几行代码连接外部身份验证提供程序。

在这里,您可以处理回调并在中登录用户

有关更多信息,请查看官方Identity Server文档中的“使用外部身份提供商登录”和“ 添加对外部身份验证的支持”页面。

默认情况下,Asp.Net身份将处理本地终结点“ / account / ExternalLogin”下的回叫。 如果需要自定义功能,则可以从基本RCL中折叠该页面并对其进行自定义。

原来我在想事情。 我可以使用在Identity Server中配置的相同OAuth Provider,并将它们移植到.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);
}

要挑战我唯一需要做的事情,就是提供一种表格,该表格将调用我的外部登录方法:

<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM