C# 如何使用自定义登录服务器验证asp.net web应用程序?
我正在使用asp.net核心制作自定义单点登录服务。我创建了一个登录服务器,它在cookie中返回JWT令牌并进行验证。我想将我的web应用程序连接到登录服务器,以便web应用程序能够识别用户是否通过登录服务器登录。 是否可以在web应用程序中使用startup.cs设置来执行此操作?如果是这样的话,我怎样才能做到呢?我不想在每个动作中都使用令牌检查过程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核心中,我们可以提供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身份验证处理程序设置来验证令牌。您可以在请求授权标头中传递令牌。更多细节,你可以参考这个。