public static class Config{//定义APIpublic static IEnumerable
2.在里面做调用设置
public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }public void ConfigureServices(IServiceCollection services){services.AddControllers();var builder = services.AddIdentityServer().AddInMemoryApiScopes(Config.ApiScopes) // 那个api可以使用.AddInMemoryClients(Config.Clients)// 哪个client可以使用.AddDeveloperSigningCredential() ;//解决连接不上的问题,实际中,签名需要一对公钥和私钥,他会帮我们将公钥和私钥存储到硬盘上}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseIdentityServer();//使用 Identity 4app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}
重生成,而使用命令行运行一下
… --urls *:5001
2.建立受保护的API
1.建立要访问受保护的
[ApiController]public class IdentityController : ControllerBase{[HttpGet("identity")][Authorize]public IActionResult Get(){return new JsonResult(from c in User.Claims select new { c.Type, c.Value });}[Authorize][HttpGet("test")]public string Getst(){return "受保护的 API 访问成功";}}
2.在 里面进行配置
public void ConfigureServices(IServiceCollection services){services.AddControllers();//接受授服务器发送的任何访问令牌 。services.AddAuthentication("Bearer").AddJwtBearer("Bearer", options =>{options.Authority = "https://localhost:5001";options.TokenValidationParameters = new TokenValidationParameters{ValidateAudience = false};});// 允许检测客户端请求的令牌中是否存在作用域services.AddAuthorization(options =>{options.AddPolicy("ApiScope", policy =>{policy.RequireAuthenticatedUser();policy.RequireClaim("scope", "api1");});});}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseAuthentication();//每次都要执行身份验证.app.UseAuthorization(); //授权,确保匿名客户端无法访问我们的 api 端点app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}
3.建立用来访问的客户端
public class Program{// IdentityModel包括一个与发现端点一起使用的客户端库 。这样,您只需要知道IdentityServer的基地址-可以从元数据中读取实际的端点地址://找到授权的服务器public static async System.Threading.Tasks.Task Main(string[] args){//找到授权服务器var client = new HttpClient();var disco = await client.GetDiscoveryDocumentAsync("http://localhost:5001");//异步的方法名前边必须声明 asyncif (disco.IsError){Console.WriteLine($"连接失败****{disco.Error}");return;}//向授权服务器请求 tokenvar tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest{Address = disco.TokenEndpoint,ClientId = "client",ClientSecret = "secret",Scope = "api1"});if (tokenResponse.IsError){Console.WriteLine("token返回错误", tokenResponse.Error);return;}Console.WriteLine(tokenResponse.Json);//将访问令牌发送给 APIvar apiClient = new HttpClient();apiClient.SetBearerToken(tokenResponse.AccessToken);var response = await apiClient.GetAsync("http://localhost:6001/test");if (!response.IsSuccessStatusCode){Console.WriteLine(response.StatusCode);Console.WriteLine("访问失败");}else{var content = await response.Content.ReadAsStringAsync();Console.WriteLine("访问成功");// Console.WriteLine(JArray.Parse(content));Console.WriteLine(content);}Console.ReadLine();}
- 八年纪物理 初二停表怎么看,怎么看机械停表
- 义乌第二富豪也凉了,义乌千万富翁到底有多少?
- 不二法门
- 你知道人体的十二大极限吗? 吉尼斯记录举重极限
- 二十四节气背诵口诀是什么 二十四节气口诀是什么
- 新冠“二次阳”来袭,八款营养汤要常喝,强免疫抗病毒,老少皆宜 吉尼斯记录鸡蛋汤
- 二 ConcurrentHashMap源码深度解析(java8)——直呼Dou
- 中国5个最有特色的摩天轮第四个独一无二第五个世界最高 中国之最摩天轮
- 徐静雨:现役中库里排第二杜兰特只能排第三,这排名非常不严谨 徐静雨各个位置历史之最
- 火影忍者十大瞳术排行榜:轮墓·边狱只能排第二 世界十大瞳术