zoukankan      html  css  js  c++  java
  • identityServer4(4)

    AuthServer配置信息存数据库

    打开之前创建的AuthServer项目

    安装IdentityServer4.EntityFramework

    dotnet add package IdentityServer4.EntityFramework --version 3.0.0

    使用sqlite存储配置

    安装

    dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 3.1.0
    dotnet add package Microsoft.EntityFrameworkCore.Tools --version 3.1.0
    

    在appsettings.json文件添加

    "ConnectionStrings":{
        "DefaultConnection":"Data Source=authServer.db"
      },
    

    在startup.cs文件中ConfigureServices类中代码修改如下:
    添加

    var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
    

    将以下代码

    builder.AddInMemoryIdentityResources(Config.Ids);
    builder.AddInMemoryApiResources(Config.Apis);
    builder.AddInMemoryClients(Config.Clients);
    

    替换成

    // 添加数据库中的配置数据(clients, resources)
    builder.AddConfigurationStore(options => {
        options.ConfigureDbContext = builder => 
            builder.UseSqlite(Configuration.GetConnectionString("DefaultConnection"),
                sql => sql.MigrationsAssembly(migrationsAssembly));
    });
    // 添加来自数据库的操作数据(codes, tokens, consents)
    builder.AddOperationalStore(options => {
        options.ConfigureDbContext = builder =>
            builder.UseSqlite(Configuration.GetConnectionString("DefaultConnection"),
                sql => sql.MigrationsAssembly(migrationsAssembly));
        // 启用自动令牌清除
        options.EnableTokenCleanup = true;
    });
    

    然后注释builder.AddDeveloperSigningCredential()

    迁移

    执行以下命令后,根目录多出以下迁移文件

    dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb
    dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb
    

    数据库初始化

    在startup.cs文件中新添加类

    private void InitializeDatabase(IApplicationBuilder app)
    {
        using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
        {
            serviceScope.ServiceProvider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();
    
            var context = serviceScope.ServiceProvider.GetRequiredService<ConfigurationDbContext>();
            context.Database.Migrate();
            if (!context.Clients.Any())
            {
                foreach (var client in Config.Clients)
                {
                    context.Clients.Add(client.ToEntity());
                }
                context.SaveChanges();
            }
    
            if (!context.IdentityResources.Any())
            {
                foreach (var resource in Config.Ids)
                {
                    context.IdentityResources.Add(resource.ToEntity());
                }
                context.SaveChanges();
            }
    
            if (!context.ApiResources.Any())
            {
                foreach (var resource in Config.Apis)
                {
                    context.ApiResources.Add(resource.ToEntity());
                }
                context.SaveChanges();
            }
        }
    }
    
    

    在startup.cs中Configure类中添加

    InitializeDatabase(app);
    

    dotnet run运行AuthServer项目,在根目录会多出authServer.db,用工具打开可见生成好多表,且clients表中也有数据


    将用户信息存数据库

    原项目没有将用户信息存数据库,只使用了测试用户,所以要重建一个IdentityServer项目

    新建IS4Server项目

    运行dotnet new is4aspid -n IS4Server,当提示“seed”用户数据库时,选择“Y”

    新建后的文件

    接下来操作如下

    然后按照之前的操作重做一遍,按照之前的操作重做一遍,按照之前的操作重做一遍

    完成迁移,运行程序后,数据库比之前多出好几个表,如下

    运行WebMvc、IS4Server项目,打开 http://localhost:5002/ 点击Privacy,跳转到登录页面,输入帐号:bob,密码:Pass123$ 后,跳转回Privacy页面

    启用跨域

    在startup.cs中:
    在ConfigureServices类中添加

    services.AddCors(c =>  
    {  
        c.AddPolicy("AllowOrigin", options => options.AllowAnyOrigin());  
    });
    

    在Configure类中添加

    app.UseCors(options => options.AllowAnyOrigin()); 
    
  • 相关阅读:
    LinuxCentOS6.5:六、克隆虚拟机
    Redis:一、简介
    LinuxCentOS6.5:五、软件安装
    shiro配置异常org.springframework.beans.factory.BeanInitializationException: The security manager does not implement the WebSecurityManager interface.
    Redis:二、安装
    LinuxCentOS6.5:二、基本命令
    HttpPostedFile hf = c.Request.Files[0]; 报错:索引超出 怎么办?
    sqlserver使用中遇到过的
    glassfish error : A full JDK (not just JRE) is required
    计划
  • 原文地址:https://www.cnblogs.com/hwxing/p/12796781.html
Copyright © 2011-2022 走看看