[英].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.