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