我们正在使用WebAPI后端升级我们的SPA(角度)应用,以通过Google对OpenID Connect进行身份验证。理想情况下,我们希望使用混合流程。
我们已经到了点击Google登录按钮后,浏览器重定向到谷歌,带您进入同意屏幕并使用代码和ID令牌将响应发送回我们的应用程序。在那里发布的大多数场景都显示了如何配置MVC应用程序,其中包含在返回授权代码时触发的通知:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = "",
MetadataAddress = "https://accounts.google.com/.well-known/openid-configuration",
RedirectUri = "https://localhost:44300/authentication",
Scope = "openid profile",
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthorizationCodeReceived = async n =>
{
在我们的案例中永远不会触发,我认为原因是因为响应被发送回我们的SPA,而不是发送到我们应用的服务器端端点。接下来的步骤是什么?
在任何一种情况下,我们可以利用OpenID中间件中的任何东西来交换代码吗?帖子请求看起来并不复杂,但如果可能的话,仍然很好地利用现有的库。
答案 0 :(得分:1)
我猜你可以通过使用中间件“ Microsoft.Owin.Security.Google ”来使用更高级别的抽象,你可以获得外部Google访问令牌而你不关心它的复杂性使用“OAuth授权代码流”,这将由中间件处理,您可以直接获得外部访问令牌。 此中间件的默认范围是:“ openid配置文件电子邮件”,您可以确定地覆盖它,但如果您通过空范围,则默认情况下会获得这些范围。您可以查看此middleware here的实施情况。
我也在博客上发布了有关使用Web API进行Google外部登录的详细帖子。没有包含MVC库,请查看此post here并希望它对您的案例有用。