日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Identity Server4学习系列四之用户名密码获得访问令牌

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Identity Server4学习系列四之用户名密码获得访问令牌 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、簡介

Identity Server4支持用戶名密碼模式,允許調用客戶端使用用戶名密碼來獲得訪問Api資源(遵循Auth 2.0協議)的Access Token,MS可能考慮兼容老的系統,實現了這個功能,但是不建議這么做.

?

2、實戰一服務端配置

接著Identity Server4學習系列三的基礎上,直接擴展里面的項目代碼,讓服務端同時支持密鑰認證和用戶名密碼認證

第一步:擴展ThirdClients類,如下:

/// <summary>/// 配置可以訪問IdentityServer4 保護的Api資源模型的第三方客戶端/// 配置客戶端訪問的密鑰/// </summary>public class ThirdClients{public static IEnumerable<Client> GetClients(){return new List<Client>(){new Client(){//客戶端的唯一Id,客戶端需要指定該ClientId才能訪問ClientId = $"client",//no interactive user, use the clientid/secret for authentication//使用客戶端密鑰進行認證AllowedGrantTypes = GrantTypes.ClientCredentials,// 認證密鑰,客戶端必須使用secret密鑰才能成功訪問ClientSecrets ={//用Sha256對"secret"進行加密new Secret("secret".Sha256())},// scopes that client has access to//如果客戶端的密鑰認證成功,限定該密鑰可以訪問的Api范圍AllowedScopes = { "api1" }},//添加支持用戶名密碼模式訪問的客戶端類型new Client(){ClientId = "userPwd.client",AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,ClientSecrets ={new Secret("secret".Sha256())},AllowedScopes = { "api1" }}};}/// <summary>/// 配置可以訪問IdentityServer4 保護的Api資源模型的第三方客戶端/// 使用用戶名密碼模式/// </summary>/// <returns></returns>public static List<TestUser> GetUsers(){return new List<TestUser>(){new TestUser(){SubjectId = "1",Username = "alice",Password = "password"}};}}

?

第二步:注冊TestUser到Identity Server4,修改StartUp文件如下:

public class Startup{// This method gets called by the runtime. Use this method to add services to the container.// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940public void ConfigureServices(IServiceCollection services){//優雅的鏈式編程//注入Identity Server4服務到DI容器中 services.AddIdentityServer()//注入臨時簽名憑據到DI容器,后期可用簽名證書的密鑰替換,用于生成零時密鑰 .AddDeveloperSigningCredential()//注入需要受Identity Server4保護的Api資源添注入到DI容器中 -內存級別 .AddInMemoryApiResources(Apis.GetApiResources())//注入需要訪問受Identity Server4保護的Api資源的客戶端(密鑰模式)注入到DI容器中 -內存級別 .AddInMemoryClients(ThirdClients.GetClients())//注入需要訪問受Identity Server4保護的Api資源的客戶端(用戶名密碼訪問模式)注入到DI容器中 -內存級別 .AddTestUsers(ThirdClients.GetUsers());//注入基本的MVC服務 services.AddMvcCore()//注入MVC的認證服務,對應控制器的Authorize特性 .AddAuthorization()//注入MVC格式化程序,對應JsonResult等等的格式化操作,主要用于控制器返回值的格式化操作 .AddJsonFormatters();//注入身份認證服務,設置Bearer為默認方案services.AddAuthentication("Bearer")//注入并配置Bearer為默認方案的基本參數.AddIdentityServerAuthentication(options =>{//設置令牌的發布者options.Authority = "http://localhost:5000";//設置Httpsoptions.RequireHttpsMetadata = false;//需要認證的api資源名稱options.ApiName = "api1";});}// 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()){//從管道中捕獲同步和異步System.Exception實例并生成HTML錯誤響應。 app.UseDeveloperExceptionPage();}//將IdentityServer 4服務注入到管道模型中(對應上面的IdentityServer 4服務的配置) app.UseIdentityServer();//將認證服務通過Microsoft.AspNetCore.Authentication.AuthenticationMiddleware中間件//注入到管道模型中(對應上面認證服務的配置) app.UseAuthentication();//將mvc添加到Microsoft.AspNetCore.Builder.IApplicationBuilder請求執行中(對應上的MVC配置) app.UseMvc();}}

ok,到這一步,Identity Server4服務端配置完成!

?

3、實戰一客戶端發起調用

調用代碼如下:

class Program{static void Main(string[] args){Request();Console.ReadKey();}async static void Request(){//請求Identity Server4服務var disco = await DiscoveryClient.GetAsync("http://localhost:5000");if (disco.IsError){Console.WriteLine(disco.Error);return;}var tokenClient = new TokenClient(disco.TokenEndpoint, "userPwd.client", "secret");var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("alice", "password", "api1");if (tokenResponse.IsError){Console.WriteLine(tokenResponse.Error);return;}//通過Identity Server4的認證過后,拿到AccessTokenvar client = new HttpClient();client.SetBearerToken(tokenResponse.AccessToken);var response = await client.GetAsync("http://localhost:5000/identity");if (!response.IsSuccessStatusCode){Console.WriteLine(response.StatusCode);}else{//認證成功,輸出Identity控制器的返回值var content = await response.Content.ReadAsStringAsync();Console.WriteLine(JArray.Parse(content));}Console.WriteLine(tokenResponse.Json);Console.WriteLine("\n\n");}}

ok,使用用戶名加密鑰模式,訪問Api成功拿到Api返回值,注意密鑰任然需要給,因為這個密鑰是用與給Token加密的,而用戶名和密碼無非是繼續加一了一層認證,如果密鑰認證成功,必須進行用戶名和密碼的認證,兩者必須同時認證成功,才能成功的發起Api的調用.

用戶名和密碼必須和服務端給定的一致,否則客戶端會報這個錯:

無效的授權.

?

至此,用戶名密碼加密鑰模式介紹完畢!

?

轉載于:https://www.cnblogs.com/GreenLeaves/p/10124365.html

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的Identity Server4学习系列四之用户名密码获得访问令牌的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日本在线 | 欧美xxxxhd | 日本高清免费aaaaa大片视频 | 久久影库 | 国产清纯白嫩初高中在线观看性色 | 欧美视频一区二区在线 | 日韩性xx | 尤物在线| 亚洲欧美日韩国产一区二区三区 | 日本一本在线观看 | 中文字幕日韩在线视频 | 中日韩精品视频在线观看 | 天天看黄色 | 毛片h| 51妺嘿嘿午夜福利 | 久久综合伊人77777麻豆 | 黄色污污网站在线观看 | 超碰p | 欧美一级日韩一级 | 日本三级中文字幕 | 激情综合五月 | av大帝 | 91九色视频在线 | 精品视频专区 | 香蕉视频2020| 91爱啪啪 | 青青草国内自拍 | japan粗暴video蹂躏 | 精射女上司 | 日韩美女视频在线观看 | 777在线视频 | 亚洲国产精品尤物yw在线观看 | 日韩中文字| 日本一品道 | 日韩一级免费看 | 超碰加勒比 | 中文字幕在线观看视频一区二区 | 成人免费大全 | 亚洲精品乱码久久久久久自慰 | 欧美乱码精品一区二区三区 | 免费久久一级欧美特大黄 | 日日干夜夜撸 | 国产一二三在线观看 | 日韩欧美一二区 | 日韩裸体视频 | cao在线| 精品一区二区三区电影 | 99久久九九 | 日本免费电影一区二区三区 | 国产97色在线 | 国产 | 美女福利在线视频 | 神马伦理影视 | 免费伊人 | 久久97久久97精品免视看 | av污 | 黑料视频在线 | 精品1区2区3区 | 中文字幕免费播放 | 伊是香蕉大人久久 | 国产精品第5页 | 国产视频999 | 国产丝袜视频 | 狠狠操亚洲 | 午夜福利三级理论电影 | 丁香婷婷深情五月亚洲 | 爆操女秘书 | 人妻少妇偷人精品视频 | 男女啊啊啊 | 男人天堂avav | 亚洲情热 | 男女瑟瑟网站 | 又粗又大又硬毛片免费看 | 国产不卡视频在线播放 | 日韩欧美国产一区二区三区 | 中文在线免费 | 中文字幕一区二区久久人妻网站 | 中文字幕视频一区 | 就爱操av | 99国产精品国产精品九九 | 一区二区三区高清在线 | 午夜电影天堂 | 怡春院国产| 爱爱网站视频 | 久久人人添人人爽添人人片 | 在线免费黄色片 | 欧美日韩精品三区 | 天天操天天玩 | 九九精品在线观看视频 | 国产区网址 | jlzzjlzz欧美大全 | 国产精品网站在线观看 | 一区二区三区丝袜 | 日本黄网站色大片免费观看 | 国产精品福利在线 | 精品视频第一页 | 欧美一级黄色片在线观看 | 日韩免费久久 | 国产精品VideoSex性欧美 | 成人免费av片 |