【问题标题】:Authentication for hybrid flow for ASP.NET MVC clientASP.NET MVC 客户端的混合流身份验证
【发布时间】:2021-05-26 06:42:16
【问题描述】:

我正在学习identityserver4,有些东西看不懂。

简短地说:我想在 ASP.NET MVC 客户端使用电子邮件和密码授权最终用户(它会将用户凭据发送到令牌服务器以获取令牌),并且我不希望第三方客户端检索我的 API 资源中的数据。

我从文档中了解到:

  • 隐式流用于 SPA(js 客户端)并使用 id_token 授权用户。我可以在浏览器中存储 id_token。

  • 客户端凭据流用于受信任的应用程序(如 ASP.NET MVC 客户端)来授权客户端并使用access_code。我可以在我的应用程序中存储access_code

看来我需要一个混合流。

documentation 中我读到我需要使用AddOpenIdConnect() 方法和

从技术上讲,令牌存储在 cookie 的属性部分中。

所以我的问题:

  1. 如果id_token可以存储在浏览器中,为什么将access_token也存储在那里不安全?

  2. 正如文档所述,令牌存储在 cookie 的属性部分中。令人困惑的是,因为一些指南说,在那里存储access_token 是不安全的。那么我应该在我的 ASP.NET MVC 客户端中的哪里存储访问令牌?

  3. 我说得对吗,AddOpenIdConnect() 将我的 ASP.NET MVC 应用程序配置为自动从令牌服务器检索 access_token?如果是,我应该在什么时候使用电子邮件/密码授权用户,以及当我向 api 资源发送请求时,如何在我的 ASP.NET MVC 客户端后端的一个 JWT 中组合所有令牌?

【问题讨论】:

    标签: asp.net-core identityserver4


    【解决方案1】:

    今天你不应该使用隐式流,它在 Oauth 2.1 中已被弃用。您应该使用的是带有 PKCE 的授权代码流。 PKCE 是授权代码流的安全增强。

    所以从 OAuth 2.1 开始,您只有两个主要流程:

    • 授权代码流,用于 MVC 客户端将用户登录到客户端
    • 客户端凭据流,用于 API->无需人工参与的 API 通信。

    回答您的问题:

    • 如果 id_token 可以存储在浏览器中,为什么在浏览器中存储 access_token 也不安全?*

    ID-Token 仅用于创建初始用户会话,之后您可以将其丢弃。在 IdentityServer 中,它的生命周期也很短,默认只有 5 分钟。

    • 正如文档所述,令牌存储在 cookie 的属性部分中。这很令人困惑,因为一些指南说,将 access_token 存储在那里是不安全的。那么我应该在我的 ASP.NET MVC 客户端中的哪里存储访问令牌?

    令牌可以存储在 ASP.NET Core 的会话 cookie 中,这是安全的。它使用数据保护 API 进行保护/加密。但是,如果这样做,cookie 的大小可能会增长很多。

    • 我说得对吗,AddOpenIdConnect() 将我的 mvc 应用程序配置为自动从令牌服务器检索 access_token?如果是的话 - 我应该在什么时候使用电子邮件/密码授权用户,以及当我向 api 资源发送请求时,如何在我的 ASP.NET MVC 客户端后端的一个 JWT 中组合所有令牌?

    AddOpenIdConnect 仅处理初始登录和检索第一个 ID 和访问令牌。它不使用刷新令牌处理访问令牌的刷新。为此,您可以添加IdentityModel library

    今天,当您使用身份验证代码流时,您将用户重定向到 IdentityServer,并让用户在那里登录,而不是将用户名/密码从浏览器传递到身份服务器。

    【讨论】:

      猜你喜欢
      • 2017-01-13
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多