首页 > 其他分享 >IdentityServer4 密码模式

IdentityServer4 密码模式

时间:2023-08-02 17:36:06浏览次数:38  
标签:Console 模式 密码 api var new Config public IdentityServer4

1.Config添加用户的配置

public class Config
{
    /// <summary>
    /// 提示invalid_scope 添加
    /// </summary>
    public static IEnumerable<ApiScope> ApiScopes =>
        new ApiScope[] {new ApiScope("api")};

    public static IEnumerable<ApiResource> GetResources()
    {
        return new List<ApiResource>
        {
            new ApiResource("api","My Api")
        };
    }

    public static IEnumerable<Client> GetClients()
    {
        return new List<Client>
        {
            new Client
            {
                ClientId = "client",
                AllowedGrantTypes = GrantTypes.ClientCredentials,
                ClientSecrets =
                {
                    new Secret("secret".Sha256())
                },
                AllowedScopes = {"api"}
            },
            //密码模式添加
            new Client
            {
                ClientId = "pwdClient",
                AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
                ClientSecrets =
                {
                    new Secret("secret".Sha256())
                },
                AllowedScopes = {"api"}
            }
        };
    }

    /// <summary>
    /// 密码模式在客户端基础上添加的测试用户
    /// </summary>
    /// <returns></returns>
    public static List<TestUser> GetTestUsers()
    {
        return new List<TestUser>
        {
            new TestUser
            {
                SubjectId = "1",
                Username = "huihui",
                Password = "123456"
            }
        };
    }
}

2.添加Client的配置

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentityServer()
        .AddDeveloperSigningCredential()
        .AddInMemoryApiResources(Config.GetResources())
        .AddInMemoryClients(Config.GetClients())
        //这个ApiScopes需要新加上,否则访问提示invalid_scope
        .AddInMemoryApiScopes(Config.ApiScopes)
        .AddTestUsers(Config.GetTestUsers())
        ;

    services.AddControllers();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseIdentityServer();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

3.密码模式获取token

  • localhost:5000/connect/token
  • post请求
  • body,x-www-form-urlencode添加参数
    • client_id:pwdClient
    • client_secret:secret
    • grant_type:password
    • username:huihui
    • password:123456
{
    "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IkFDMEU3NUU4QzdGNjI0NkRBNjY2RDE5RjVCMDdCNjkyIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2NDEzODQzODksImV4cCI6MTY0MTM4Nzk4OSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiY2xpZW50X2lkIjoicHdkQ2xpZW50Iiwic3ViIjoiMSIsImF1dGhfdGltZSI6MTY0MTM4NDM4OSwiaWRwIjoibG9jYWwiLCJqdGkiOiI0QkNCREExRTVFNjUzNUVCMkY2MTY0OUU3MzIwNTk2QSIsImlhdCI6MTY0MTM4NDM4OSwic2NvcGUiOlsiYXBpIl0sImFtciI6WyJwd2QiXX0.NbeaxQH3qs-aXbRysFTltz2vkzKjjMvjAV0UXhH0VeqGaXSbSKzWnghmCuJLeOtn57NbLgVqsaBogIT4nxQcbkU7FfOTyFJbpgl5qJYsdRAhw0UQNc14EHO3DjCOHI6Z14i3L7sw87bpND1Z3_mcG4ijxHoSyNOBfk9uDoCe4j-007DnGS6pUJJk_P5QxEMa9FBy61KYyj5ZTRTCtNDWJRfs792ZcSqX9UqHhjXZMRdyNkd8ix_SsdRrliQq8GEn60E3qTs80yOoowtEnF8N03yGMQpcFb3f5EFPsRXKHO3ppPHNKvr6cyID5kaeE4wNg_lvYokTjyRPsB603vGzew",
    "expires_in": 3600,
    "token_type": "Bearer",
    "scope": "api"
}

获取token

4.postman请求api

Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkFDMEU3NUU4QzdGNjI0NkRBNjY2RDE5RjVCMDdCNjkyIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE2NDEzODQ1MzYsImV4cCI6MTY0MTM4ODEzNiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiY2xpZW50X2lkIjoicHdkQ2xpZW50Iiwic3ViIjoiMSIsImF1dGhfdGltZSI6MTY0MTM4NDUzNiwiaWRwIjoibG9jYWwiLCJqdGkiOiIwN0FFNTk4MENDNUJENTMxMTE5QTg3RkNDRjNFMEYyOSIsImlhdCI6MTY0MTM4NDUzNiwic2NvcGUiOlsiYXBpIl0sImFtciI6WyJwd2QiXX0.lXcUyrUyUi_3xXtwPw-K-1u-qX4cF-m8RM5cSe9WDNB3XzLNdcg-IlsRjDmelHjB28gyUQTOkNV5r85K38-ciPzPGnlqNNDyc_3CrH9kD4OrCRD-oUGF24rcmEDuqOEXKBSbUCVl4oFsPNpAtAUTnNFENGMHW6ue_oAi5Ic1ZTbsxTBR09z-910PJfPnv8EEb1CFiD4CZ9SzXtK8_yHChdSUvapgtca5ZVGAuVwE8TlVtSjWGrpPP-HSCTdWeyrEvZXYNojifsQipDO0klRgf3g5fBl-dhzevV_IggG3jfXYchJeSjZroRo9_t1SRL7bF25R54cvy2RJFyBkWi_-Mg

aa

这样postman就请求成功了。

5.添加控制台应用调用api

  1. Nuget添加 IdentityModel
  2. 控制台应用程序调用
static async Task Main(string[] args)
{
    var client = new HttpClient();
    var disco = await client.GetDiscoveryDocumentAsync("http://localhost:5000");
    if (disco.IsError)
    {
        Console.WriteLine(disco.Error);
    }
    var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
    {
        Address = disco.TokenEndpoint,
        ClientId = "pwdClient",
        ClientSecret = "secret",
        Scope = "api",
        UserName = "jesse",
        Password = "123456"
    });
    if (tokenResponse.IsError)
    {
        Console.WriteLine(tokenResponse.Error);
        return;
    }
    Console.WriteLine(tokenResponse.Json);

    //调用api
    var apiClient = new HttpClient();
    apiClient.SetBearerToken(tokenResponse.AccessToken);

    var response = await apiClient.GetAsync("http://localhost:5001/WeatherForecast");
    if (!response.IsSuccessStatusCode)
    {
        Console.WriteLine(response.StatusCode);
    }
    else
    {
        var content = await response.Content.ReadAsStringAsync();
        Console.WriteLine(JArray.Parse(content));
    }

    Console.ReadKey();
}

aa

参考官网地址:https://identityserver4.readthedocs.io/en/latest/

标签:Console,模式,密码,api,var,new,Config,public,IdentityServer4
From: https://www.cnblogs.com/huiteresa/p/17601289.html

相关文章

  • SingletonPattern-单例模式
    在C#中,单例模式(SingletonPattern)用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式常用于需要限制某个类只能创建一个对象的场景,例如数据库连接、日志记录器等。懒汉式(LazyInitialization)这种实现方式使用了双重检查锁定(双IF加锁),即在获取实例前先检查......
  • 构建以人为本的全面预算管理模式
    在财务分析的转型过程中,系统、预测、过程和大数据等都发挥着重要的作用,除此之外,我们往往会忽视一个更重要的因素——人在成功的转型项目中更是发挥着核心作用。企业大部分转型之旅都与人有关,通常人可以发挥创造力以更好地为企业服务。如今,数据质量正以难以置信的速度得到改善,企业运......
  • 宏基笔记本BIOS密码
    1、重启后马上按shift键今天高级设置/或者按F2进BIOS2宏碁bios默认密码8位是需要通过您自己的电脑查看的哦,每台电脑的密码都不一样的,具体的查询方法如下:1、开机启动的过程按F2键,进入输入BIOS密码的界面,输入三次错误密码,2、选择第一个EnterUnlockPassword。3、记录Key后面的8个......
  • Java单例模式
    单例模式线程安全的四种创建方式静态代码块,静态内部类,双重检锁,枚举模式代码展示静态代码块privatestaticfinalSingletonDemoSINGLETON_DEMO;static{SINGLETON_DEMO=newSingletonDemo();}privateSingletonDemo(){}publicstaticSingletonDemoget......
  • 基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程
    基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程电子病历EMR(ElectronicMedicalRecord)也称为计算机化的病历或基于计算机的病人记录CMR(ComputerBasedMdicalRecord),它是用电子设备保存、管理和传输数字化的病人医疗记录,是取代手写纸张的病历。对电子病历一致......
  • Java设计模式--装饰器模式
    Java设计模式--装饰器模式一、问题背景在项目场景中,有这样一个需求,需要对录入的加班进行规则校验,包括但不限于,对加班的录入时间进行检查,对录入的加班类型进行检查,对加班日期的班次进行对比检查,对潜入系统的时长进行对比检查等等。具体来说,就是对一条加班记录,进行多种规则的检查......
  • #Powerbi 1分钟学会,设置有密码保护的powerbi报告
    目前,有一些朋友和笔者一样,公司暂时没有部署powerbi服务器,但是有时也需要使用powerbi共享一些看板。如果直接将制作好的报告直接发布在公网上,又存在一定的风险,即便可能只是公布1天。那么有没有办法,可以让咱们的报告能在短期内受到保护呢?今天,我们就花1分钟来学习一下,通过书签导航......
  • 【设计模式】适配器模式Adapter:处理不同 API 接口的兼容性
    (目录)适配器模式适配器模式(AdapterPattern)是作为两个不兼容的接⼝之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独⽴接⼝的功能。在某些时候,客户期望获得某种功能接⼝但现有的接⼝⽆法满⾜客户的需求,例如美国的正常供电电压为110V,⼀个中国⼈带了⼀款中国制造......
  • 适配器模式
    分类类适配器模式对象适配器模式类适配器是由继承关系构成,对象适配器是聚合或组合的关系构成所以类适配器耦合性较高,使用较少角色/结构目标接口:我们中国的手机充电器适配者类:欧洲那边已有的欧洲标准的插座适配器类:可以把我们的手机充电器调整到可以用欧洲插座的适......
  • Java设计模式
    #Java设计模式GoF(最先开始着手进行设计模式分类整理工作)对设计模式的定义是:设计模式是在特定的环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用。一、面向对象设计的七大原则1.1单一职责原则定义:一个对象应该只包含单一的职......