Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 如何使用auth0 jwt识别用户_Rest_Asp.net Core_Jwt_Auth0 - Fatal编程技术网

Rest 如何使用auth0 jwt识别用户

Rest 如何使用auth0 jwt识别用户,rest,asp.net-core,jwt,auth0,Rest,Asp.net Core,Jwt,Auth0,我有一个angular2前端,它使用Auth0进行身份验证,后端有一个.net核心应用程序。所有这些都是为了强制执行安全的API调用 在后端识别经过身份验证的用户的最佳方法是什么?我能想到的一种相当笨拙的方法是公开一个“setUserToken”api调用,该调用允许我将用户ID连接到以下任一项: 令牌var bearerToken=Request.Headers[“Authorization”].ToString() 社交IDvar socialId=User.Claims.Where(c=

我有一个angular2前端,它使用Auth0进行身份验证,后端有一个.net核心应用程序。所有这些都是为了强制执行安全的API调用

在后端识别经过身份验证的用户的最佳方法是什么?我能想到的一种相当笨拙的方法是公开一个“setUserToken”api调用,该调用允许我将用户ID连接到以下任一项:

  • 令牌
    var bearerToken=Request.Headers[“Authorization”].ToString()

  • 社交ID
    var socialId=User.Claims.Where(c=>c.Type==)http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier“”.First()值

这样,通过后续的API调用,我可以简单地
findUserByToken()
findUserBySocialProviderOpenId()


我肯定我错过了一个更明显的解决这个问题的方法。非常感谢提供任何指导。

JWT的
子声明始终由Auth0生成,并将包含用户标识符,与用于登录的身份提供商无关

子(主体)索赔确定了作为联合工作组主体的委托人。JWT中的声明通常是关于主题的声明。主题值的范围必须是发行人上下文中本地唯一的或全局唯一的。本索赔的处理通常是针对具体应用的。子值是一个区分大小写的字符串,包含StringOrURI值。此声明的使用是可选的


在大多数情况下,您的后端API应该只是Auth0访问令牌的使用者,不需要公开任何与身份验证相关的端点。

感谢您的回复Rodrigo:)事实上,我的子声明确实告诉了我身份提供者。所以(在上面的例子中)
socialId==google-oauth2 |[idNumber]
虽然,我的主要问题是如何在我的API中识别用户。我不确定我是否遵循了-API收到了
sub
声明,因此它允许您识别用户是谁。或者你是在问一个更具体的实现问题吗?这正是我要找的:)所以在我的例子中,子声明是google id。你能把子声明存储在数据库中,针对特定用户吗?我最近来自Java EE背景,所以如果.NET有我所缺少的一些聪明的替代方案,我不是100%的。因为JWT允许无状态身份验证(您可以信任令牌中的任何内容),所以完全不需要存储ID或数据库。如果您确实需要在数据库中存储有关用户的更多信息,那么可以使用
子声明作为用户的唯一ID。好的。这差不多就结束了。谢谢你抽出时间。