1.创建项目并添加引用
创建ASP.NET Core Web API项目IdentityServer.EasyDemo.Api
1
2
引用IdentityServer4.AccessTokenValidation
3
2.定义一个Api接口
新增接口文件IdentityController.cs,用于测试授权
如果你直接访问http://localhost:5001/identity ,你会得到一个401错误,因为调用这个接口需要凭证
这里设置一个Api接口,路由是"identity",跟传统的/controller/action访问路由不同,GET请求访问/identity即可
[Route("identity")] [Authorize] public class IdentityController : ControllerBase { [HttpGet] public IActionResult Get() { //这里是查询声明身份 return new JsonResult(from c in User.Claims select new { c.Type, c.Value }); } }
3.配置Api
services添加IdentityServerAuthentication,设置授权地址为IdentityServer的网址(这里保证了在用户访问到未授权的方法时,会自动跳转到IdentityServer的授权页面)
注意保证Api的ApiName在IdentityServer的Api集合中
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvcCore() //将认证服务添加到DI,配置"Bearer"作为默认方案 .AddAuthorization() .AddJsonFormatters(); services.AddAuthentication("Bearer") //将IdentityServer访问令牌验证处理程序添加到DI中以供身份验证服务使用 .AddIdentityServerAuthentication(options => { //用于授权的地址 options.Authority = "http://localhost:5000"; options.RequireHttpsMetadata = false; //该Api项目对应的IdentityServer的Api资源,与GetApiResources方法里面的Api名称对应 options.ApiName = "api1"; }); } public void Configure(IApplicationBuilder app) { //将认证中间件添加到流水线中,以便在对主机的每次呼叫时自动执行认证 app.UseAuthentication(); app.UseMvc(); } }
4.在属性中将Api项目的端口号设置为5001
4