我对OAuth的使用完全感到困惑,我不知道如何在我的szenario中使用oauth。目前,我使用的是“纯”JWT方法,该方法如下所示:
现在我想到了OAuth的用法,但我很困惑如何使用它来实现szenario。
=我可以将id_token (使用RSA256的JWT)发送到rest,使用公共证书验证它,并提取一些用户信息
但是:
( a)我读到过不应该使用id_token访问api。相反,我应该使用access_token (它不是JWT格式,也不会给我任何关于用户的信息),并使用access_token查询用户信息?每一个请求都是这样的?!
( b)我看不出用户角色发挥作用的程度。当我有一些操作(rest端点)时,这些操作只允许"admins“或"customers”。我看不出有什么可能给它们下定义。
你看,我有点困惑,我希望有人能澄清所有的事情。非常感谢克里斯
发布于 2018-07-04 07:22:23
( a)您使用的两个令牌都应该是JWT格式,您应该在经过身份验证的查询中使用access_token。access_token不一定包含有关用户的信息,因此在服务器端,您通常只能确定令牌服务发出的令牌是有效的。如果所有这些检查都通过了,您应该接受它作为一个经过身份验证的用户。
( b)可以将用户角色作为附加声明(例如,role=admin、数据作者或role=customer、列表阅读器)放置到access_token的有效负载部分中。
希望能帮上忙。
发布于 2018-07-05 13:03:48
( a)听起来您得到的是一个不透明的 access_token,而不是JWT。您需要在中创建Auth0 API(类似于您已经创建的应用程序/客户端)。然后,在进行身份验证时,在audience参数中传递该标识符。然后您应该得到一个JWT,它将有一个sub参数,它是用户的Auth0 ID,它可以帮助您识别用户是谁。我相信,如果您需要在令牌中添加更多的标识信息,也可以使用Auth0规则。有关不透明访问令牌与JWT访问令牌的完整说明,请参见此处:https://auth0.com/docs/tokens/access-token
( b)角色是棘手的。我相信Auth0会建议您在API上创建作用域,然后在登录期间请求所需的作用域。然后将Auth0规则用作一种“胶水”,以调整已请求但不允许通过身份验证的用户的作用域。它们还有一个授权扩展,您可以使用它来帮助实现其中的一些功能。另一个选项可以是将角色信息存储在用户元数据中,并使用规则将该信息放入令牌中。最后,我们选择的选项是不使用Auth0来定义角色。我们让Auth0进行身份验证,一旦经过身份验证,我们就在系统中检查对事物的授权方面的访问。有很多选择。
https://stackoverflow.com/questions/51158314
复制相似问题