【问题标题】:OpenID Connect middleware for SPA + WebAPI用于 SPA + WebAPI 的 OpenID Connect 中间件
【发布时间】:2015-01-09 05:22:17
【问题描述】:

我们正在使用 WebAPI 后端升级我们的 SPA(角度)应用程序,以通过 Google 使用 OpenID Connect 进行身份验证。理想情况下,我们希望使用混合流。

我们已经到了在单击 Google 登录按钮后,浏览器会重定向到 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 调用时将令牌识别为有效。
  • 我们是否告诉 google 将响应发送到我们的 web api 层,让其交换访问令牌的代码,并发送带有最后包含访问令牌的哈希片段的重定向响应?通知处理程序会在这种情况下触发吗?

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

【问题讨论】:

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


    【解决方案1】:

    我想您可以通过使用中间件“Microsoft.Owin.Security.Google”来使用更高级别的抽象,您可以获得外部 Google 访问令牌,而您并不关心随之而来的复杂性使用“OAuth 授权代码流程”,这将由中间件处理,您可以直接获取外部访问令牌。 此中间件的默认范围是:“openid profile email”,您可以肯定地覆盖它,但如果您传递空范围,则默认情况下会获得这些范围。您可以检查此middleware here 的实现。

    此外,我还发布了有关通过 Web API 使用 Google 外部登录的详细博文。不包含 MVC 库,请查看此 post here,希望它对您的案例有用。

    【讨论】:

    • 感谢Taiseer,这个中间件是否与OpenId Connect 隐式流一起使用?鉴于您立即获得访问令牌,而不是稍后交换访问令牌的授权代码,它似乎是基于范围值和隐式流程的 OpenId Connect。
    • 您是对的,您将直接获取外部访问令牌,它使用的是授权码流程,因为这是网络服务器到网络服务器的通信,而您的客户端现在(Web API) 可以安全地存储 Google 机密,您的客户端被视为机密客户端。
    • @Tom 这对你有用吗?如果您需要进一步的帮助,请告诉我。
    • 是的,这让我解决了无法从已弃用的基于 OpenID 2.0 的 google 登录(随个人帐户 mvc 模板附带)升级的问题。我还与 Fiddler 验证了访问令牌的授权代码交换是由 google owin 中间件进行的。此外,这里是一个平行讨论,其中一位协调员对不受支持的 google oauth 流发表了有趣的评论:katanaproject.codeplex.com/discussions/571862
    猜你喜欢
    • 2018-11-07
    • 2018-03-09
    • 2020-05-08
    • 2018-11-26
    • 2014-11-30
    • 2023-03-12
    • 2020-03-29
    • 2017-06-05
    • 2020-05-18
    相关资源
    最近更新 更多