目前我已将Identityserver4配置为独立项目+我的WebAPI并存储在IdentityServer的DB凭据中。
现在我有问题如何将CRUD(在我的前端API中)发送到IdentityServer(我希望从我的API添加客户端到IdentityServer)
如何制作物业?
答案 0 :(得分:9)
从IdentityServer4.EntityFramework
和IdentityServer4.EntityFramework.Storage
,您可以访问IConfigurationDbContext
(一旦您使用AddConfigurationStore
在ConfigureServices
中添加了所需的服务。因为它是作为依赖注入系统的一部分注册的,所以您可以在其中一个控制器中依赖它。 e.g:
public class ClientsController : ControllerBase
{
private readonly IConfigurationDbContext _configurationDbContext;
public ClientsController(IConfigurationDbContext configurationDbContext)
{
_configurationDbContext = configurationDbContext;
}
// ...
}
IConfigurationDbContext
是标准DbContext
的抽象,具有以下DbSet<T>
属性:
Clients
IdentityResources
ApiResources
它还包括SaveChanges
和SaveChangesAsync
- 人们可能期望DbContext
的所有内容。由于所有这些,您可以像其他任何Entity Framework Core驱动的数据库一样CRUD这些实体。
最后要注意的是Models
(IdentityServer4.Storage
)和Entities
(IdentityServer4.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放在这里。
这对ApiResources
,IdentityResources
等的工作方式也是一样的。如果您想了解更多有关这些内容的详细信息,请使用我提供的源代码链接。这里提供的#39; ve应该让你满意。
要在API项目中使用IdentityServer4
和IdentityServer4.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