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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】...

發(fā)布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

密碼模式(Resource Owner Password Credentials Grant)中,用戶向客戶端提供自己的用戶名和密碼。客戶端使用這些信息,向"服務商提供商"索要授權(quán)。基于之前的?IdentityServer3 實現(xiàn) OAuth 2.0 授權(quán)服務【客戶端模式(Client Credentials Grant)】 修改。

客戶端

public class Clients{public static List<Client> Get(){return new List<Client>{// no human involvednew Client{ClientName = "App接口服務",ClientId = "app_test_id",Enabled = true,AccessTokenType = AccessTokenType.Reference,Flow = Flows.ClientCredentials,ClientSecrets = new List<Secret>{new Secret("F621F470-9731-4A25-80EF-67A6F7C5F4B8".Sha256())},AllowedScopes = new List<string>{"user","order"}},// human is involvednew Client{ClientName = "username client",ClientId = "irving",Enabled = true,AccessTokenType = AccessTokenType.Reference,Flow = Flows.ResourceOwner,ClientSecrets = new List<Secret>{new Secret("21B5F798-BE55-42BC-8AA8-0025B903DC3B".Sha256())},AllowedScopes = new List<string>{"user","order"}}};}}

用戶

public class Users{public static List<InMemoryUser> Get(){return new List<InMemoryUser>{new InMemoryUser{Username = "irving",Password = "123456",Subject = "1",Claims = new[]{new Claim(Constants.ClaimTypes.GivenName, "Bob"),new Claim(Constants.ClaimTypes.FamilyName, "Smith")}},new InMemoryUser{Username = "bob",Password = "secret",Subject = "2"},new InMemoryUser{Username = "alice",Password = "secret",Subject = "3"}};}}

服務端配置

public class Startup{/// <summary>/// 配置idsv授權(quán)服務/// </summary>/// <param name="app"></param>public void Configuration(IAppBuilder app){var opts = new IdentityServerOptions{SiteName = "Embedded Homeinns PMS 2.0 OAuth2 Service",EnableWelcomePage = true,Factory = new IdentityServerServiceFactory().UseInMemoryClients(Clients.Get()).UseInMemoryScopes(Scopes.Get())//.UseInMemoryUsers(new List<InMemoryUser>()), .UseInMemoryUsers(Users.Get()),RequireSsl = false,//SigningCertificate = new X509Certificate2(string.Format(@"{0}\bin\identityServer\idsrv3test.pfx", AppDomain.CurrentDomain.BaseDirectory), "idsrv3test") };app.UseIdentityServer(opts);/*//自定義路由app.Map("/identity", idsrvApp =>{idsrvApp.UseIdentityServer(opts);});*/}

控制器

[Route("api/v1/values")]public class ValuesController : ApiController{public IHttpActionResult Get(){var caller = User as ClaimsPrincipal;var subjectClaim = caller.FindFirst("sub");if (subjectClaim != null){return Json(new{message = "OK user",client = caller.FindFirst("client_id").Value,subject = subjectClaim.Value});}else{return Json(new{message = "OK computer",client = caller.FindFirst("client_id").Value});}}}

控制臺

class Program{static void Main(string[] args){/*POST http://192.168.210.165/connect/token HTTP/1.1Accept: application/jsonAuthorization: Basic YXBwX3Rlc3RfaWQ6RjYyMUY0NzAtOTczMS00QTI1LTgwRUYtNjdBNkY3QzVGNEI4Content-Type: application/x-www-form-urlencodedHost: 192.168.210.165Content-Length: 40Expect: 100-continueConnection: Keep-Alivegrant_type=client_credentials&scope=user*//*GET http://192.168.210.165:88/api/v1/values HTTP/1.1Authorization: Bearer 9f82476751e1f8b93f1ea6df7de83b51Host: 192.168.210.165:88*/var log = new LoggerConfiguration().WriteTo.LiterateConsole(outputTemplate: "{Timestamp:HH:mm} [{Level}] ({Name:l}){NewLine} {Message}{NewLine}{Exception}").CreateLogger();//ClientCredentialsvar token = new TokenClient("http://192.168.210.165/connect/token","app_test_id","F621F470-9731-4A25-80EF-67A6F7C5F4B8");var response = token.RequestClientCredentialsAsync("user").Result;var client = new HttpClient();client.SetBearerToken(response.AccessToken);log.Information(client.GetStringAsync("http://192.168.210.165:88/api/v1/values").Result);//ResourceOwner var resourceOwnerClient = new TokenClient("http://192.168.210.165/connect/token","irving","21B5F798-BE55-42BC-8AA8-0025B903DC3B");var data = resourceOwnerClient.RequestResourceOwnerPasswordAsync("irving", "123456", "order").Result;client.SetBearerToken(data.AccessToken);log.Information(client.GetStringAsync("http://192.168.210.165:88/api/v1/values").Result);Console.ReadKey();}} }

總結(jié)

以上是生活随笔為你收集整理的基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。