【问题标题】:Call Web Api with Identity使用身份调用 Web API
【发布时间】:2020-06-22 16:17:57
【问题描述】:

我正在寻找,但似乎找不到答案。基本上,我有一个 Web API,它将进行身份验证并生成一个令牌,一个新的客户端应用程序将在其中发送凭据并接收一个令牌,然后我想将身份用于 UserManager 实现。但是,当使用身份(个人帐户)创建新的 asp.net 核心时,我必须直接创建一个 DbContext 和一个数据库。

我很好奇是否有教程,或者甚至可以在没有客户端拥有自己的数据库的情况下调用身份,只需调用接收 JWT 响应的 Web API。

也许我误解了身份。

【问题讨论】:

    标签: c# asp.net-core asp.net-web-api asp.net-core-mvc asp.net-identity


    【解决方案1】:

    需要一个数据库来存储有关您的用户及其声明的信息。您将需要注册一个身份验证中间件,以在用户的​​ Web 浏览器上维护您的身份令牌和声明。使用 JWT 的常用中间件是 OpenID Connect。下面是一个例子:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    
        // Allow sign in via an OpenId Connect provider
        services.AddAuthentication(options => {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie(options => {
            options.LoginPath = "/Account/Login/";
        })
        .AddOpenIdConnect(options =>
        {
            options.ClientId = Configuration["oidc:clientid"];
            options.ClientSecret = Configuration["oidc:clientsecret"];
            options.Authority = Configuration["oidc:authority"];
    
            options.ResponseType = "code";
            options.GetClaimsFromUserInfoEndpoint = true;
        });
    }
    

    此外,另一个选项是 IdentityServer4,它支持 OpenID Connect、OAuth2 和 SAML2 以及 Sustainsys.Saml2。 IdentityServer4 可以充当生成 JWT、OAuth2 引用令牌或 SAML2 响应的完整身份提供者。

    【讨论】:

      【解决方案2】:

      Asp Net Identity 支持基于 jwt-token 的授权和身份验证,但不支持生成 jwt 令牌。您可以使用 Auth0 等第三方服务在您的 Web api 中实现用户数据库和令牌生成。如果您想自己实现它(这对教学来说是个好主意,但对现实世界不利)有一个很好的 article 用于 asp net core 2.0,但它适用于 3.1,只需稍作改动。

      【讨论】:

      • web api 解决方案有一个用于 jwt 令牌的 generatejsontoken,我遇到的问题是如何在客户端应用程序上管理令牌。我一直在阅读以在解决方案中安装身份,它需要自己的数据酶,女巫不是我想要的,我希望 api 告诉我这个用户是否经过身份验证
      • 在客户端,您可以简单地将 jwt 令牌存储为 cookie,每次请求都会发送该 cookie。如果用户按下“注销”,只需删除 cookie
      • 你想用这个实现什么?为什么你需要你的 api 来判断用户是否经过身份验证?如果用户提供了有效的 jwt 令牌,则意味着他已通过身份验证。据我所知,jwt 令牌不应该存储在 DB 或 smth 中。它们通过密钥签名,并保证提供的令牌不是假的
      • 我理解的方式客户端有一个Web表单,然后在激活登录方法时发送凭据(用户名和密码),这将返回一个令牌,我需要为将来的api存储调用或直到令牌过期。但是数据库来自 api 而不是客户端应用程序
      • 这些表是 Asp Net Identity 的一部分。需要它们来检查用户是否真的在应用程序中注册以向用户提供 jwt 令牌。如果您不想将其存储在本地 msdb 中,请使用 3rd 方身份验证提供程序
      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2015-01-02
      • 2016-08-20
      相关资源
      最近更新 更多