如何做网站seo诊断,中英文切换网站,用jsp做的网站有哪些,问答网站怎么做营销OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准#xff08;如果是按照参考文章复制粘贴,应该不会出现踩坑#xff0c;但是我喜欢自己手动敲一遍#xff09;#xff0c;发现几个坑#xff0c;因而总结下经验#xff0…OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准如果是按照参考文章复制粘贴,应该不会出现踩坑但是我喜欢自己手动敲一遍发现几个坑因而总结下经验让其他小白同学少走弯路 参考第一篇https://www.cnblogs.com/cby-love/p/9281955.html 参考第二篇https://www.cnblogs.com/wyt007/p/8284482.html 博客园晓晨的关于identityServer4的中文文档地址 http://www.cnblogs.com/stulzq/p/8119928.html Docker中文文档 https://yeasy.gitbooks.io/docker_practice/content/ OAuth2.0Open Authorization是一个开放授权协议第三方应用不需要接触到用户的账户信息如用户名密码通过用户的授权访问用户资源 OAuth的步骤一般如下 1、客户端要求用户给予授权2、用户同意给予授权3、根据上一步获得的授权向认证服务器请求令牌token4、认证服务器对授权进行认证确认无误后发放令牌5、客户端使用令牌向资源服务器请求资源6、资源服务器使用令牌向认证服务器确认令牌的正确性确认无误后提供资源 服务端代码实现 第一步新建一个webapi空项目 第二步添加Nuget包IdentityServer4 第三步新建一个帮助类(类名自定义即可)用来创建IdentityServer4.Model生成授权token public class Config{/// summary/// 所有可以访问的Resource/// /summary/// returns/returnspublic static IEnumerableApiResource GetResources(){return new ListApiResource{ //第一个参数需要与下面标记红色字体保持一致,可以随意命名,但是请注意大小写,第二个参数 我干了你随意。new ApiResource(api,My Api)};}/// summary/// 客户端/// /summary/// returns/returnspublic static IEnumerableClient GetClients(){return new ListClient{new Client(){ClientIdclient,////模式最简单的模式AllowedGrantTypesGrantTypes.ClientCredentials,ClientSecrets{new Secret(secret.Sha256())},AllowedScopes{ api}}};}} 第一处坑讲解:上面代码红色标记,请注意大小写,如果一个大写,一个小写。当你授权的时候会提示错误 第四步修改Startup.cs 红色字体是需要加的方法和中间件 public class Startup{public Startup(IConfiguration configuration){Configuration configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){ services.AddIdentityServer().AddDeveloperSigningCredential()//添加开发人员签名凭据.AddInMemoryApiResources(Config.GetResources())//添加内存apiresource.AddInMemoryClients(Config.GetClients());//添加内存client
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseIdentityServer();//使用IdentityServerapp.UseMvc();}} 第五步修改Program.cs 其实这一步可以省略掉,因为这一部将api不托管在IIS Express上,通过控制台程序启动。 自定义路径配置如下 public class Program{public static void Main(string[] args){CreateWebHostBuilder(args).Build().Run();}public static IWebHostBuilder CreateWebHostBuilder(string[] args) WebHost.CreateDefaultBuilder(args).UseStartupStartup() //该处端口可以自定义 只要不与你其他端口冲突就好.UseUrls(http://localhost:5000);} 第二处坑讲解生成token的服务端已经全部设置完成,如果你按照以前习惯启动F5---会发现自定义端口未起作用。你需要设置一下才行 http://localhost:5000/.well-known/openid-configuration访问 可以看到是一个restful的api 然后用postman神器 服务端成功,咱们开始用客户端 客户端代码实现 第一步新建一个webapi空项目 第二步添加Nuget包IdentityServer4.AccessTokenValidation 第三步修改Startup.cs 红色字体是需要加的方法和中间件 public class Startup{public Startup(IConfiguration configuration){Configuration configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){ services.AddAuthentication(Bearer)//添加授权模式.AddIdentityServerAuthentication(Options {Options.Authority http://localhost:5000;//授权服务器地址Options.RequireHttpsMetadata false;//是否是httpsOptions.ApiName api;});services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseAuthentication();//使用授权中间件
app.UseMvc();}} 第三处坑讲解: 1.授权服务地址端口号,请按照服务端配置的端口号来如果用IIS Express,请右键项目属性-调试查看。 2.Options.ApiName api; 请看上述踩坑一配置的名称大小写需要统一 第四步修改Program.cs 其实这一步可以省略掉,因为这一部将api不托管在IIS Express上,通过控制台程序启动。与上述服务端配置一样。记得将端口号修改 第四处需要注意的地方 需要将服务端运行起来,然后再运行客户端(顺序不重要,重要的是必须两个程序都启动起来。可以将服务端发布到IIS上,客户端通过vs运行。我比较懒分别打开两个一个设置为启动服务端,一个设置为启动客户端) 第五步添加授权标签 可以在action和controller上添加 [HttpGet][Authorize] public ActionResultIEnumerablestring Get(){return new string[] { value1, value2 };} 添加在action上表示这个方法需要授权才能访问否则访问不了 添加在controller上表示整个controller下的所有action方法都需要授权后才能访问 下图是成功如果空白表示授权失败(你可以打个断点)。 出现一些错误码html(titleInternal Server Error/title)在里面是因为服务端没启动成功 需要注意的地方:授权码 前面必须加Bearer 然后空格 在客户端配置第三步中 services.AddAuthentication(Bearer)//添加授权模式 有的同学可能会想 那我将这个改掉 然后保持一致应该可以 恭喜这位同学想法非常棒但是你可以试一试。这个格式是固定规范转载于:https://www.cnblogs.com/xiaobai123/p/9284874.html