当前,我在我的SPA应用程序中使用Password Flow
。
现在,我必须将Client Credentials
流与当前的实现集成。
var descriptor = new OpenIddictApplicationDescriptor
{
ClientId = "console",
ClientSecret = "388D45FA-B36B-4988-BA59-B187D329C207",
DisplayName = "My client application",
Permissions =
{
OpenIddictConstants.Permissions.Endpoints.Token,
OpenIddictConstants.Permissions.GrantTypes.ClientCredentials
}
我已经在系统上成功实现了这两种集成。当使用client_id
发送请求时,该应用将获得预期的授权和认证。
但是我注意到,当使用Password flow
时,我与使用ApplicationUser
作为dbo.User表中Asp.net身份的一部分一样。
但是client credentials
来自未与应用程序用户链接的其他名称空间。
如何将client_id
设置为dbo.User
的一部分。如何将Client Credetials
与Usermanager<User>
链接?
为什么要这种实现方式是因为在执行crud操作期间,我具有列名CreatedBy
。它被引用到表dbo.User
中,我想从dbo.User中填充Id
。但是在客户凭证流中没有User
。
获取用户ID
public interface IUserResolverService
{
HttpContext HttpContext { get; }
Task<Guid> GetUserId();
}
public class UserResolverService : IUserResolverService
{
IHostingEnvironment _hostingEnv;
private readonly IHttpContextAccessor accessor;
private readonly UserManager<User> _user;
public UserResolverService(IHttpContextAccessor accessor, UserManager<User> user, IHostingEnvironment hostingEnv)
{
this._user = user;
this.accessor = accessor;
this._hostingEnv = hostingEnv;
}
public HttpContext HttpContext
{
get { return accessor.HttpContext; }
}
public async Task<Guid> GetUserId()
{
var user = await _user.GetUserAsync(accessor.HttpContext.User);
return user?.Id ?? Guid.Empty;
}
}
您能建议我这种情况的解决方法吗?
答案 0 :(得分:0)
如何将client_id设置为dbo.User的一部分。如何将客户端凭据与Usermanager链接?
这是不可能的,而且实际上没有任何意义。客户端凭据是唯一不涉及任何用户的OAuth 2.0核心流程,因为它是针对“服务到服务”方案而设计的,在该方案中,客户端应用程序不代表用户,而是直接以自己的身份进行操作。
要变通解决此问题,您可能想使CreatedBy
可为空,或者使用代表您在AuthorizationController
中使用的应用程序的声明之一,例如客户标识符或客户名称。>