IdentityServer 4,为CRUD客户端创建面板

时间:2017-11-22 14:49:36

标签: c# asp.net-core entity-framework-core identityserver4

目前我已将Identityserver4配置为独立项目+我的WebAPI并存储在IdentityServer的DB凭据中。

现在我有问题如何将CRUD(在我的前端API中)发送到IdentityServer(我希望从我的API添加客户端到IdentityServer)

如何制作物业?

2 个答案:

答案 0 :(得分:9)

IdentityServer4.EntityFrameworkIdentityServer4.EntityFramework.Storage,您可以访问IConfigurationDbContext(一旦您使用AddConfigurationStoreConfigureServices中添加了所需的服务。因为它是作为依赖注入系统的一部分注册的,所以您可以在其中一个控制器中依赖它。 e.g:

public class ClientsController : ControllerBase
{
    private readonly IConfigurationDbContext _configurationDbContext;

    public ClientsController(IConfigurationDbContext configurationDbContext)
    {
        _configurationDbContext = configurationDbContext;
    }

    // ...
}

IConfigurationDbContext是标准DbContext的抽象,具有以下DbSet<T>属性:

  • Clients
  • IdentityResources
  • ApiResources

它还包括SaveChangesSaveChangesAsync - 人们可能期望DbContext的所有内容。由于所有这些,您可以像其他任何Entity Framework Core驱动的数据库一样CRUD这些实体。

最后要注意的是ModelsIdentityServer4.Storage)和EntitiesIdentityServer4.EntityFramework.Storage)。还有一些用于在这些之间进行映射的扩展方法(例如ClientMappers.ToEntity)。

考虑到所有这些,您可以在控制器内部创建Model(或者可能在某个地方封装比直接更好)。以下是创建新Client的基本示例:

var clientModel = new Client
{
    ClientId = "",
    ClientName = "",
    // ...
};

_configurationDbContext.Clients.Add(clientModel.ToEntity());

await _configurationDbContext.SaveChangesAsync();

这里的Client课程来自IdentityServer4.Models,然后使用我在上面提到的Entity扩展方法转换为ToEntity。使用Model并转换为Entity比尝试直接操纵Entity更简单 - 如果您有兴趣,可以看到mapping放在这里。

这对ApiResourcesIdentityResources等的工作方式也是一样的。如果您想了解更多有关这些内容的详细信息,请使用我提供的源代码链接。这里提供的#39; ve应该让你满意。

要在API项目中使用IdentityServer4IdentityServer4.EntityFramework,您只需将两个引用添加到API项目中即可。之后,您可以采用相同的方式配置DI(使用AddIdentityServer中的ConfigureServices),但不需要添加中间件(在{{1中使用UseIdentityServer }})。您甚至可以使用Configure设置相关服务,因为您不需要签名密钥等。

答案 1 :(得分:0)

您可以通过引导ID4快速入门(此处的教程)来实现此目的: http://docs.identityserver.io/en/release/quickstarts/3_interactive_login.html

其他选择是使用位于此处的快速启动种子来加快速度: https://github.com/IdentityServer/IdentityServer4.Samples

现在,如果你想实现restfull登录,那么它周围有限制(我也希望找到它)看看这个问题: IdentityServer 4 Restfull Login/Logout