我对OAuth的使用完全感到困惑,我不确定如何在我的szenario中使用oauth。目前,我使用的是“纯” JWT方法,如下所示:
现在我正在考虑OAuth的用法,但是我很困惑如何使用它来实现szenario。
=我可以将id_token(带有RSA256的JWT)发送到我的rest api,使用公共证书对其进行验证并可以提取一些用户信息
但是:
a)我已经阅读到我不应该使用id_token访问我的api。相反,我应该使用access_token(它不是JWT格式,并且不会向我提供有关用户的任何信息),并使用access_token查询用户信息?每个请求都应该是谁?!
b)我看不到用户角色起作用的地步。当我有一些操作(其余端点)时,仅允许“管理员”或“客户”使用。我认为无法定义它们。
您看到我有点困惑,我希望有人可以澄清所有事情。 非常感谢 克里斯
答案 0 :(得分:0)
a)您使用的两个令牌都应为JWT格式,并且应将access_token用于经过身份验证的查询。 access_token不一定包含有关用户的信息,因此在服务器端,您通常只能确定令牌是由令牌服务发出的并且是有效的。如果所有这些检查都通过了,则应将其接受为经过身份验证的用户。
b)用户角色可以像许多其他事物一样作为附加声明(例如role = admin,datawriter或role = customer,listreader)放置在access_token的有效负载部分中。
希望对您有帮助。
答案 1 :(得分:0)
a)听起来您正在获得一个不透明的访问令牌,而不是JWT。您需要在Auth0中创建一个 API (类似于您已经创建的应用程序/客户端)。然后,当您进行身份验证时,可以在audience
参数中传递该标识符。然后,您应该找回JWT,它将具有一个sub
参数,该参数是用户的Auth0 ID,可以帮助您识别用户是谁。我相信,如果您需要在令牌中放入更多标识信息,也可以使用Auth0规则。有关不透明和JWT访问令牌的完整说明,请参见此处:https://auth0.com/docs/tokens/access-token
b)角色很棘手。我相信Auth0建议您在API上创建范围,然后在登录期间请求所需的范围。然后,将Auth0规则用作一种“胶水”,以调整已请求但未经身份验证的用户允许的范围。他们也有一个授权扩展,您可以使用它来帮助实现某些功能。另一种选择是将角色信息存储在用户元数据中,并使用规则将该信息放入令牌中。最后,我们选择的选项是不使用Auth0定义我们的角色。我们让Auth0进行身份验证,一旦获得身份验证,我们就会在系统中检查对事物授权的访问权限。很多选择。