Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用标识调用Web Api_C#_Asp.net Core_Asp.net Web Api_Asp.net Core Mvc_Asp.net Identity - Fatal编程技术网

C# 使用标识调用Web Api

C# 使用标识调用Web Api,c#,asp.net-core,asp.net-web-api,asp.net-core-mvc,asp.net-identity,C#,Asp.net Core,Asp.net Web Api,Asp.net Core Mvc,Asp.net Identity,我在找,但似乎找不到答案。基本上,我有一个web API,它将进行身份验证并生成一个令牌,在这个令牌中,新的客户端应用程序将发送凭证并接收令牌,然后我将使用标识来实现UserManager。但是,在使用identity(个人帐户)创建新的asp.net核心时,我必须直接使用它创建一个DbContext和一个数据库 我很好奇是否有教程,或者甚至可以调用identity,而不让客户端拥有自己的数据库,只调用接收JWT响应的web API 可能我误解了身份。Asp Net identity支持基于jw

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

我很好奇是否有教程,或者甚至可以调用identity,而不让客户端拥有自己的数据库,只调用接收
JWT
响应的web API


可能我误解了身份。

Asp Net identity支持基于jwt令牌的授权和身份验证,但不支持生成jwt令牌。您可以使用第三方服务(如Auth0)在web api中实现用户batabase和令牌生成。如果您想自己实现它(这对教学来说是个好主意,但对现实世界来说是个坏主意),那么asp net core 2.0有一个好主意,但它适用于3.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和Sustainsys.SAML2的SAML2。IdentityServer4可以充当生成JWT、OAuth2引用令牌或SAML2响应的完整身份提供程序。

web api解决方案具有JWT令牌的generatejsontoken,我面临的问题是如何在客户端应用程序上管理令牌。我一直在阅读以安装identity,它在解决方案中需要自己的数据库,这不是我想要的,我希望api告诉我该用户是否经过身份验证。在客户端,您可以简单地将jwt令牌存储为cookie,它将随每个请求一起发送。如果用户按下“注销”,只需删除Cookie,您想用它实现什么?为什么需要api来判断用户是否经过身份验证?若用户提供了有效的jwt令牌,则表示他已通过身份验证。据我所知,jwt令牌不应该存储在DB或smth中。它们通过密钥进行签名,并保证所提供的令牌不是伪造的。我理解客户端有一个web表单,然后在激活登录方法时发送凭据(用户名和密码),这将返回一个令牌,我需要存储该令牌以备将来的api调用或直到令牌过期。但是数据库来自api而不是客户端应用程序。这些表是Asp网络标识的一部分。它们用于检查用户是否真的在应用程序中注册,以向用户提供jwt令牌。如果不想将其存储在本地msdb中,请使用第三方身份验证提供程序