如何获得智威汤逊?
Posted
技术标签:
【中文标题】如何获得智威汤逊?【英文标题】:How to get a JWT? 【发布时间】:2015-10-16 17:44:13 【问题描述】:阅读有关使用 JWT 保护应用程序的信息时,通常会说客户端最初从服务器获取令牌,然后将此令牌与每个请求一起发送到 API。
一旦您有了令牌,这种方法就很有效。据我所知,传输令牌的默认方式是使用 HTTP 标头,即 Authentication with Bearer 作为令牌的前缀作为值。
但是 - 是否还有一种默认方式来初始获取令牌?在示例中,您经常看到这只是对 HTTP 端点的简单请求,然后返回 JSON。但我想知道是否有更多的标准工作流程,例如描述此端点的名称应该是什么,如在 OAuth2 中?
有什么提示吗?
【问题讨论】:
【参考方案1】:JWT 是一种令牌格式,用于OAuth2 和OpenID Connect 等安全协议。
如何从授权服务器获取令牌取决于您使用的授权流程。
OAuth 2.0 中定义了 4 个授权流,用于不同的客户和用途。
-
授权码授予
此授权适用于 Web 应用程序。用户的浏览器被重定向 (HTTP 302) 到授权服务器。授权服务器负责对用户进行身份验证(通过用户名/密码、智能卡、2 因素身份验证等)。
然后,授权服务器将浏览器重定向回 Web 应用程序中使用代码预先注册的端点。然后,Web 应用程序使用它自己的凭据(客户端 ID 和客户端密码)和授权代码从授权服务器请求访问令牌。
授权服务器向 Web 应用程序返回访问令牌和刷新令牌。请注意,浏览器(不受信任)永远不会看到访问令牌。只有 Web 应用程序(受信任)可以访问访问令牌和刷新令牌。
此授权很难从 Web 应用程序以外的其他客户端使用,因为它基于 HTTP 重定向。
-
隐式授权
此授权用于不受信任的客户端,例如 javascript 应用程序或第 3 方移动客户端(您从应用商店下载的客户端)。
它还将浏览器(或浏览器控件)重定向到授权服务器,但不是在成功验证后向浏览器返回代码,而是直接返回访问令牌。由于客户端不受信任,因此授权不会返回刷新令牌。访问令牌需要存储在某个地方,并且容易受到 XSS 攻击。
即使您没有获得刷新令牌,但某些实现确实提供了一种获取新访问令牌的方法,方法是在隐藏的 IFRAME 中与授权服务器通信,并使用 cookie 与授权服务器本身进行身份验证。
-
资源所有者密码凭据授予
此授权适用于受信任的客户端,例如具有安全存储功能的桌面应用程序或第一方移动应用程序。客户端应用程序向用户(资源所有者)询问他们的用户名/密码,然后将其发送到授权服务器以获取访问令牌和刷新令牌。
一旦客户端拥有访问令牌,它可以丢弃密码,因为它可以使用刷新令牌来获取新的访问令牌。这使其比基本身份验证更安全。
此授权不依赖于浏览器重定向,并且可以在任何可以执行 HTTP 请求的应用程序中轻松使用。
-
客户端凭据授予
此授权旨在验证客户端(应用程序)而不是客户端的用户。
在这种情况下,客户端将其客户端 ID 和机密直接提交给授权服务器以获取访问和刷新令牌。
所以基本上前两个授权依赖于类似浏览器的功能(HTTP 重定向、html 登录页面),而其他两个授权只需要一个 HTTP 堆栈来与授权服务器通信。
【讨论】:
我见过的关于资助类型的最佳解释,起首部分! 同上@Hui Wang 评论!【参考方案2】:每个 OAuth2 服务器都有自己的端点。客户端可以使用http://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata 等发现协议发现相关端点的名称。
【讨论】:
以上是关于如何获得智威汤逊?的主要内容,如果未能解决你的问题,请参考以下文章
RoleGuard 如何在 Nest JS 中工作?智威汤逊