ServiceStack 是一个流行的 .NET Web 框架,它提供了许多内置的身份验证和授权机制,包括 JWT(JSON Web Token)身份验证。以下是一个简单的示例,展示如何在 ServiceStack 应用程序中设置和使用 JWT 身份验证提供程序。
首先,确保你已经安装了 ServiceStack 和相关的身份验证包。你可以通过 NuGet 包管理器安装以下包:
Install-Package ServiceStack
Install-Package ServiceStack.Authentication.Jwt
在你的 ServiceStack 应用程序中,配置 JWT 身份验证提供程序。你可以在 AppHost
类的 Configure
方法中进行配置。
using ServiceStack;
using ServiceStack.Authentication.Jwt;
using ServiceStack.Configuration;
public class AppHost : AppHostBase
{
public AppHost() : base("My ServiceStack App", typeof(MyService).Assembly)
{
}
public override void Configure(Container container)
{
// 配置 JWT 身份验证提供程序
var jwtAuthProvider = new JwtAuthProvider
{
HashAlgorithm = "HS256",
RequireSecureConnection = true,
Secret = "your-secret-key", // 替换为你的密钥
IssuerSecret = "your-issuer-secret", // 替换为你的发行者密钥
AllowUnsignedTokens = false,
RequireVerification = true,
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateAudience = true,
Issuer = "your-issuer", // 替换为你的发行者
Audience = "your-audience", // 替换为你的受众
};
container.Register<IAuthPlugin>(jwtAuthProvider);
// 其他配置...
}
}
你可以创建一个服务来生成 JWT 令牌。以下是一个简单的示例:
using ServiceStack;
using ServiceStack.Authentication.Jwt;
using ServiceStack.FluentValidation;
using ServiceStack.ServiceInterface;
using ServiceStack.ServiceInterface.Auth;
[Route("/generate-token")]
public class GenerateTokenRequest : IReturn<GenerateTokenResponse>
{
public string UserName { get; set; }
}
public class GenerateTokenResponse
{
public string Token { get; set; }
}
public class GenerateTokenService : Service
{
public GenerateTokenResponse Post(GenerateTokenRequest request)
{
var userAuth = new UserAuth
{
Id = 1, // 替换为用户的实际 ID
UserName = request.UserName,
Email = "user@example.com", // 替换为用户的实际邮箱
DisplayName = "User Name", // 替换为用户的实际显示名称
};
var jwtAuthProvider = GetPlugin<JwtAuthProvider>();
var token = jwtAuthProvider.CreateJwtToken(userAuth);
return new GenerateTokenResponse { Token = token };
}
}
ServiceStack 会自动验证传入请求中的 JWT 令牌。你可以在服务中访问当前认证的用户信息。
public class MyService : Service
{
public object Get(MyRequest request)
{
var userAuth = GetSession();
if (userAuth == null)
{
throw new UnauthorizedException("Invalid token");
}
// 使用 userAuth 对象进行操作
return new MyResponse { Message = $"Hello, {userAuth.DisplayName}!" };
}
}
领取专属 10元无门槛券
手把手带您无忧上云