以下是一个使用ASP.NET Core身份验证和IdentityServer的代码示例:
首先,你需要在Startup.cs文件中配置ASP.NET Core身份验证和IdentityServer。在ConfigureServices方法中,添加IdentityServer服务和身份验证服务:
public void ConfigureServices(IServiceCollection services)
{
// 添加身份验证服务
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000"; // IdentityServer的地址
options.RequireHttpsMetadata = false; // 如果使用HTTPS,则设置为true
options.ApiName = "api1"; // 资源名称
});
// 添加IdentityServer服务
services.AddIdentityServer()
.AddDeveloperSigningCredential() // 添加开发者签名凭据,仅用于开发环境
.AddInMemoryApiResources(Config.GetApiResources()) // 添加API资源
.AddInMemoryClients(Config.GetClients()) // 添加客户端
.AddTestUsers(Config.GetUsers()); // 添加测试用户
// 其他服务的配置...
}
接下来,你需要创建一个名为Config的类,用于配置API资源、客户端和测试用户。以下是一个示例:
public static class Config
{
public static IEnumerable GetApiResources()
{
return new List
{
new ApiResource("api1", "My API")
};
}
public static IEnumerable GetClients()
{
return new List
{
new Client
{
ClientId = "client",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes = { "api1" }
}
};
}
public static List GetUsers()
{
return new List
{
new TestUser
{
SubjectId = "1",
Username = "alice",
Password = "password"
},
new TestUser
{
SubjectId = "2",
Username = "bob",
Password = "password"
}
};
}
}
最后,在你的Controller中,你可以使用[Authorize]特性来保护你的API端点,并使用User.Identity.Name属性来获取当前用户的用户名:
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult> Get()
{
var username = User.Identity.Name;
return new string[] { "value1", "value2" };
}
}
这是一个基本的示例,你可以根据你的需求进一步配置和扩展身份验证和IdentityServer。