我目前正在使用Openiddict,Identity和Entity Framework来管理我的用户并将Bearer
令牌分配给用户以保护我的API。
我的基础架构目前在后端使用ASP.NET Core Web API,在前端使用单独的React应用程序。 React应用程序对我的API进行HTTP调用以检索它的数据。后端根本没有服务器端HTML呈现。
在大多数情况下,一切都按照我的需要运作。我可以注册用户并从API中检索令牌。这些令牌包含在Authorization
标头中的HTTP调用中。我的AuthorizationController
使用了这个:https://github.com/openiddict/openiddict-samples/blob/dev/samples/PasswordFlow/AuthorizationServer/Controllers/AuthorizationController.cs并进行了一些小调整。我的Startup.cs
也几乎使用了https://github.com/openiddict/openiddict-samples/blob/dev/samples/PasswordFlow/AuthorizationServer/Startup.cs
在某些情况下,我需要对特定于用户的端点进行API调用。例如,如果我需要知道用户是否对评论进行了投票。我不想在查询字符串中传递用户ID
来获取用户详细信息,而是使用我收到的Bearer
令牌,用于为该端点进行API调用。我不知道怎么做。
在一些研究中,我已经完成了它看起来像一些示例使用ASP.NET Core MVC而不是API来检索具有User
变量的用户,如此处https://github.com/openiddict/openiddict-samples/blob/dev/samples/PasswordFlow/AuthorizationServer/Controllers/ResourceController.cs#L20-L31所示,但这似乎不是适用于我的基础设施。
我的问题是如何根据传递给API的Bearer
令牌查找用户,以便从我的数据库中查找用户详细信息?我假设API传递的所有令牌都分配给该特定用户,对吧?如果是这种情况,应该很容易根据Bearer
令牌查找它们。
答案 0 :(得分:1)
问题是:如何使用Openiddict根据为API调用分配给它们的令牌查找用户?我需要先获取用户详细信息,然后才能完成其他任务。是否有内部烘焙的东西,或者我必须自己写支持吗?
在授权控制器中创建AuthenticationTicket
(稍后由OpenIddict用于生成访问令牌)时,您必须添加与所代表的主题/实体对应的sub
声明。访问令牌。
假设您使用用户标识符作为sub
声明,您可以使用User.FindFirst(OpenIdConnectConstants.Claims.Subject)?.Value
轻松地从API端点中提取它,并使用它来进行数据库查找。