适用于SPA + WebAPI的OpenID Connect中间件

时间:2014-11-12 11:14:02

标签: asp.net-web-api google-authentication katana openid-connect

我们正在使用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,而不是发送到我们应用的服务器端端点。接下来的步骤是什么?

  • 我们是否在客户端上收到代码并向我们的web api层发送ajax请求,然后将其交换为访问令牌?一旦我们拥有访问令牌,我们如何通知用户已登录,以便在我们从js进行api调用时,令牌被识别为有效。
  • 我们是否告诉谷歌将响应发送到我们的网络API层,让它交换访问令牌的代码并发送带有包含访问令牌的哈希片段的重定向响应?通知处理程序会在该实例中触发吗?

在任何一种情况下,我们可以利用OpenID中间件中的任何东西来交换代码吗?帖子请求看起来并不复杂,但如果可能的话,仍然很好地利用现有的库。

1 个答案:

答案 0 :(得分:1)

我猜你可以通过使用中间件“ Microsoft.Owin.Security.Google ”来使用更高级别的抽象,你可以获得外部Google访问令牌而你不关心它的复杂性使用“OAuth授权代码流”,这将由中间件处理,您可以直接获得外部访问令牌。 此中间件的默认范围是:“ openid配置文件电子邮件”,您可以确定地覆盖它,但如果您通过空范围,则默认情况下会获得这些范围。您可以查看此middleware here的实施情况。

我也在博客上发布了有关使用Web API进行Google外部登录的详细帖子。没有包含MVC库,请查看此post here并希望它对您的案例有用。