看到这个video,它在OAuth2中详细说明了客户端应用程序首先必须从授权服务器获得授权许可,然后在能够访问资源服务器之前使用该授权获取令牌。赠款的用途是什么?为什么不在用户用他/她的用户名和密码登录后马上给予客户令牌?为什么您需要授权许可才能直接授予令牌?
回答
因为它对于某些应用程序类型更安全。
你所描述的是所谓的授权代码流。它通常用于“经典”Web应用程序,只有后端需要访问资源服务器。授权代码交换访问令牌发生在后端,访问令牌永远不会离开它。交换只能进行一次,另外客户端ID和秘密(存储在后端)是必要的。
单页面应用程序通常使用隐式流,其中访问令牌直接在URL中传递到前端。
查看更多在这里: IdentityServer Flows
编辑:问:“我还没有看到它是如何更安全的因为你必须有授权,以获得令牌为什么需要2而不是只有一件东西来访问资源?如果有人盗取令牌,他们可以访问资源 - stackjlei“
”窃取“访问令牌将独立于您的应用程序如何获取它。但是,在后端窃取访问令牌要比在前端困难得多。
授权代码传送到后端也超过了前端,但风险是有人拦截,并使用它很小:
- 它只能进行一次交换。
- 您需要client-id和client-secret才能交换它。客户端秘密只在后端提供。
- 通常情况下,授权码将由您的后端立即交换到访问令牌。所以它的寿命只有几秒钟。之后有人获得使用的授权码并不重要。
在你的情况有可能是两台服务器的授权和资源之一。 它也可能只有一个,但让我们来想象这种情况。
授权服务器的目的是向已知客户端发布短期访问令牌。客户通过他们的CLientID和CLientSecret识别自己。
授权服务器(AS)持有客户端及其机密列表,并首先进行检查以确保传递的值与其列表匹配。如果他们这样做,它发出一个短暂的令牌。
然后客户端可以与资源服务器(RS)通话,而令牌有效。一旦令牌到期,可以请求新令牌,或者如果授权服务器允许,可以刷新过期的令牌。
这里的重点是安全性。通常,访问令牌通过请求的Authorization头传递,并且该请求需要通过https来确保数据不会被盗用。如果不知何故,某人获得了一个访问令牌,他们只能使用它直到它到期,因此令牌的短暂生命实际上非常重要。这就是为什么你不发出一个永不过期的令牌。
为什么要使用临时令牌?为什么不仅仅使用临时授权而且根本不使用令牌?我不明白这两个步骤如何使它更安全 – stackjlei
- 1. Google Cloud Storage JSON API需要什么授权令牌?
- 2. 需要授予哪个权限才能访问sys.dba_systems
- 3. 授予Oracle授予权限
- 4. 授予WebDeploy授权
- 5. 授权令牌值
- 6. AH01626:要求所有授予的授权结果:授予
- 7. 贝宝直接付款授权/授权可能吗?
- 8. 权限需要授予执行
- 9. 许多会话的授权令牌
- 10. Youtube Api - “需要授权您需要在继续之前授权访问”错误
- 11. 即使在授予publish_stream时也需要访问令牌吗?
- 12. GraphQL授权/许可
- 13. 为什么第一次授予用户权限时创建了“授予用法”?
- 14. Google C2DM授权令牌
- 15. 发送授权令牌| Gatling
- 16. 不记名令牌授权
- 17. 获取授权令牌
- 18. API授权令牌错误
- 19. Thinktecture.Identity SAML令牌未授权
- 20. 通过JWT令牌授权
- 21. Facebook授权访问令牌?
- 22. 为什么我的mysql不能授予用户特权?
- 23. 是否需要更改注册表才能授予程序权限?
- 24. Oauth2断言授权:为什么不刷新令牌?
- 25. MySQL - 授予权限
- 26. mysql授予权限
- 27. 授予LIST权限
- 28. 授予dbms_crypto权限
- 29. UILocalNotification需要许可显示,但它已被授予
- 30. 授予用户授予其他用户的授权
我还是不明白它是如何更安全的,因为你必须获得授予才能获得令牌。为什么需要2件事而不是只有1件事来访问资源?如果有人窃取了令牌,他们仍然可以访问资源 – stackjlei