Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# 如何使用自定义登录服务器验证asp.net web应用程序?_C#_Asp.net_Asp.net Core_Authentication_Single Sign On - Fatal编程技术网

C# 如何使用自定义登录服务器验证asp.net web应用程序?

C# 如何使用自定义登录服务器验证asp.net web应用程序?,c#,asp.net,asp.net-core,authentication,single-sign-on,C#,Asp.net,Asp.net Core,Authentication,Single Sign On,我正在使用asp.net核心制作自定义单点登录服务。我创建了一个登录服务器,它在cookie中返回JWT令牌并进行验证。我想将我的web应用程序连接到登录服务器,以便web应用程序能够识别用户是否通过登录服务器登录。 是否可以在web应用程序中使用startup.cs设置来执行此操作?如果是这样的话,我怎样才能做到呢?我不想在每个动作中都使用令牌检查过程 提前感谢据我所知,在asp.net核心中,我们可以提供jwtbear身份验证来检查用户是否登录。所有这些都是在web应用程序而不是登录服务器上

我正在使用asp.net核心制作自定义单点登录服务。我创建了一个登录服务器,它在cookie中返回JWT令牌并进行验证。我想将我的web应用程序连接到登录服务器,以便web应用程序能够识别用户是否通过登录服务器登录。 是否可以在web应用程序中使用startup.cs设置来执行此操作?如果是这样的话,我怎样才能做到呢?我不想在每个动作中都使用令牌检查过程


提前感谢

据我所知,在asp.net核心中,我们可以提供jwtbear身份验证来检查用户是否登录。所有这些都是在web应用程序而不是登录服务器上提供的。如果将令牌发送到登录服务器,web应用程序将如何知道用户是否登录

通常,我们会在web应用程序端直接检查用户令牌是否有效

我们可以设置登录服务器和web应用程序使用相同的颁发者、访问者和SecretKey

然后,我们可以直接在web应用程序中验证用户,而不是登录服务器

更多详细信息,请参考以下代码:

登录服务器生成令牌:

    public static string GetToken3()
    {

        var key = Encoding.ASCII.GetBytes
        ("YourKey-2374-OFFKDI940NG7:56753253-tyuw-5769-0921-kfirox29zoxv");
        //Generate Token for user 
        var JWToken = new JwtSecurityToken(
            issuer: "http://localhost:45092/",
            audience: "http://localhost:45092/",
            claims: new List<Claim>
{
    new Claim(ClaimTypes.Name, "Users2222" )
},
            notBefore: new DateTimeOffset(DateTime.Now).DateTime,
            expires: new DateTimeOffset(DateTime.Now.AddDays(1)).DateTime,
            //Using HS256 Algorithm to encrypt Token  
            signingCredentials: new SigningCredentials
            (new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256)
        );
        string token = new JwtSecurityTokenHandler().WriteToken(JWToken);
        return token;
    }
        //Provide a secret key to Encrypt and Decrypt the Token
        var SecretKey = Encoding.ASCII.GetBytes
             ("YourKey-2374-OFFKDI940NG7:56753253-tyuw-5769-0921-kfirox29zoxv");

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = false,
        ValidateAudience = false,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = "http://localhost:45092/",
        ValidAudience = "http://localhost:45092/",
        IssuerSigningKey = new SymmetricSecurityKey(
            SecretKey),
        ClockSkew = TimeSpan.Zero
    }
);

您需要一个OAuth/OIDC框架。例如IdentityServer4。感谢您的回答。我有个问题。从登录服务器获取令牌后,web应用程序如何直接验证它?我应该在哪里传递令牌?您可以看到asp.net核心具有身份验证中间件,该中间件将使用JWT身份验证处理程序设置来验证令牌。您可以在请求授权标头中传递令牌。更多细节,你可以参考这个。