在 StormPath 之上添加授权代码授予
Adding Authorization Code Grant on top of StormPath
我需要构建一个 OAuth 2.0 提供程序,并希望使用 StormPath 来保持身份并生成访问令牌和刷新令牌。但是,StormPath 不支持授权代码授予。因此,我正在考虑在 StormPath 之上实施授权代码授予。这是推荐的吗?您会推荐更好的方法吗?
您会推荐什么 Java 库和什么 NodeJS 来实现 OAuth 2 提供程序?
我喜欢 Stormpath 使用 JWT 的想法,它不需要作为访问令牌持久化(我做对了吗?),我想在我的系统中使用它。所以,我应该使用 Stormpath 的 CustomData 来存储授权代码,但使用 Stormpath API 为我生成令牌,这对吗?或者我是否必须生成自己的令牌,并使用 Stormpath 的 CustomData 来存储它们?
嘿嘿,我在@Stormpath 工作,所以想加入这里。
目前,您可能已经知道,我们仅支持密码授予和客户端凭据授予 OAuth2 流程。我们正在努力在未来支持其他 2 个流程(授权代码和隐式),但它有点落后。
如果您想成为自己的 OAuth2 提供者(我想这就是您要做的),并允许其他开发人员构建应用程序,让用户通过您的网络服务登录到他们的网站,那么是的——您确实需要自己支持授权代码和/或隐式授权类型。
我过去曾与几个人一起实现过这类事情。
通常情况下,我推荐的是使用任何语言的开源 OAuth2 服务器库来处理授权代码/隐式协商,然后简单地将用户及其令牌存储在 Stormpath 和用户的自定义数据。
如果您想了解更多详细信息,请扩展您的问题并在下方发表评论,我会更新我的答案以反映更多详细信息。
更新
关于 Java 库 -- 我已经请我的一位同事写了我们所有的 Java 库来发表评论并为你提出建议 =) 我是 Python / 节点 / 伙计,对不起!
现在,关于代币:
- Stormpath 使用 JWT 代表 OAuth2 的访问和刷新令牌。
- 这些令牌只是 'strings',但它们必须存储在浏览器中(使用 cookie)或客户端设备(如移动设备 phone),以便使用正确。所以是的 - 它们必须保留在客户端上!
我要实现的(高级)是这样的:
- 当用户注册您的网站时,像往常一样将它们存储在 Stormpath 中。
- 使用 Java 中的 OAuth2 提供程序库来处理 Web 服务器上的授权代码/隐式授权流。这将涉及在数据库中的某个位置存储授权码。
当用户通过授权码/隐式登录您的应用程序时,您要做的是:
- 使用 Java 库,您必须向用户显示一个显示 'Do you except these permissions? yada yada yada...'.
的屏幕
- 用户接受后,将授权码存储在帐户的自定义数据中(稍后您将需要)。
当用户使用授权码向您的服务器发送返回请求,并希望获得访问令牌时,您需要:
- 获取帐户的自定义数据。
- 从 CustomData 中获取授权码,并验证它是否与用户发送给您的授权码相同。
- 如果有效,则使用 Java 中的 JWT 库为用户生成 JWT 访问令牌。我推荐JJWT:https://github.com/jwtk/jjwt
当用户向您的服务器发送访问令牌以表明身份时,您需要:
- 验证 JWT。
- 从 JWT 中获取用户的 HREF(类似于 https://api.stormpath.com/v1/accounts/xxx)。
- 从 Stormpath 获取用户帐户(通过 href)。
- 根据需要使用该用户对象 =)
希望这是有道理的!
听起来工作量很大,但实际上应该很简单。您实际上只需要 OAuth2 库来帮助您正确处理 OAuth2 POST 请求数据,并帮助处理以下事项:
- 定义权限(范围)。
- 等等
我是 Stormpath 的 Java 开发者传播者。
Java SDK 通过 SAML 提供商和社交提供商(例如 Facebook 和 Google)支持授权码授予类型。
更高级别的集成,如 Servlet、Spring 和 Spring Boot 目前支持通过 Stormpath 的 ID 站点服务的外部提供者身份验证流程。
我们正在努力将对这些流程的支持直接集成到集成中。您可以跟踪 here.
的进度
如果您想实现 成为 授权代码授权类型提供程序的能力,我建议您使用 Apache Oltu 库。您仍然可以使用 Stormpath Java SDK 将 Stormpath 与 Oltu 集成。
我需要构建一个 OAuth 2.0 提供程序,并希望使用 StormPath 来保持身份并生成访问令牌和刷新令牌。但是,StormPath 不支持授权代码授予。因此,我正在考虑在 StormPath 之上实施授权代码授予。这是推荐的吗?您会推荐更好的方法吗?
您会推荐什么 Java 库和什么 NodeJS 来实现 OAuth 2 提供程序?
我喜欢 Stormpath 使用 JWT 的想法,它不需要作为访问令牌持久化(我做对了吗?),我想在我的系统中使用它。所以,我应该使用 Stormpath 的 CustomData 来存储授权代码,但使用 Stormpath API 为我生成令牌,这对吗?或者我是否必须生成自己的令牌,并使用 Stormpath 的 CustomData 来存储它们?
嘿嘿,我在@Stormpath 工作,所以想加入这里。
目前,您可能已经知道,我们仅支持密码授予和客户端凭据授予 OAuth2 流程。我们正在努力在未来支持其他 2 个流程(授权代码和隐式),但它有点落后。
如果您想成为自己的 OAuth2 提供者(我想这就是您要做的),并允许其他开发人员构建应用程序,让用户通过您的网络服务登录到他们的网站,那么是的——您确实需要自己支持授权代码和/或隐式授权类型。
我过去曾与几个人一起实现过这类事情。
通常情况下,我推荐的是使用任何语言的开源 OAuth2 服务器库来处理授权代码/隐式协商,然后简单地将用户及其令牌存储在 Stormpath 和用户的自定义数据。
如果您想了解更多详细信息,请扩展您的问题并在下方发表评论,我会更新我的答案以反映更多详细信息。
更新
关于 Java 库 -- 我已经请我的一位同事写了我们所有的 Java 库来发表评论并为你提出建议 =) 我是 Python / 节点 / 伙计,对不起!
现在,关于代币:
- Stormpath 使用 JWT 代表 OAuth2 的访问和刷新令牌。
- 这些令牌只是 'strings',但它们必须存储在浏览器中(使用 cookie)或客户端设备(如移动设备 phone),以便使用正确。所以是的 - 它们必须保留在客户端上!
我要实现的(高级)是这样的:
- 当用户注册您的网站时,像往常一样将它们存储在 Stormpath 中。
- 使用 Java 中的 OAuth2 提供程序库来处理 Web 服务器上的授权代码/隐式授权流。这将涉及在数据库中的某个位置存储授权码。
当用户通过授权码/隐式登录您的应用程序时,您要做的是:
- 使用 Java 库,您必须向用户显示一个显示 'Do you except these permissions? yada yada yada...'. 的屏幕
- 用户接受后,将授权码存储在帐户的自定义数据中(稍后您将需要)。
当用户使用授权码向您的服务器发送返回请求,并希望获得访问令牌时,您需要:
- 获取帐户的自定义数据。
- 从 CustomData 中获取授权码,并验证它是否与用户发送给您的授权码相同。
- 如果有效,则使用 Java 中的 JWT 库为用户生成 JWT 访问令牌。我推荐JJWT:https://github.com/jwtk/jjwt
当用户向您的服务器发送访问令牌以表明身份时,您需要:
- 验证 JWT。
- 从 JWT 中获取用户的 HREF(类似于 https://api.stormpath.com/v1/accounts/xxx)。
- 从 Stormpath 获取用户帐户(通过 href)。
- 根据需要使用该用户对象 =)
希望这是有道理的!
听起来工作量很大,但实际上应该很简单。您实际上只需要 OAuth2 库来帮助您正确处理 OAuth2 POST 请求数据,并帮助处理以下事项:
- 定义权限(范围)。
- 等等
我是 Stormpath 的 Java 开发者传播者。
Java SDK 通过 SAML 提供商和社交提供商(例如 Facebook 和 Google)支持授权码授予类型。
更高级别的集成,如 Servlet、Spring 和 Spring Boot 目前支持通过 Stormpath 的 ID 站点服务的外部提供者身份验证流程。
我们正在努力将对这些流程的支持直接集成到集成中。您可以跟踪 here.
的进度如果您想实现 成为 授权代码授权类型提供程序的能力,我建议您使用 Apache Oltu 库。您仍然可以使用 Stormpath Java SDK 将 Stormpath 与 Oltu 集成。