当前位置: 首页 > 知识库问答 >
问题:

在没有JavaScript的情况下实现OAuth2.0是可能的吗?

左丘宜然
2023-03-14

现在亚马逊加入了单点登录供应商的行列。它们只支持OAuth2.0。

总而言之,OAuth2.0似乎是获胜的候选者,而不是openid,因为我关心的所有提供者现在都支持oauth。

所以我考虑直接在我的电子商务站点中实现oauth。

Facebook提供了一种完全的服务器端方式,不涉及JavaScripts。

亚马逊没有。

但它都是OAuth2.0,不是吗?

我想实现几个oauth提供程序。其中肯定包括谷歌、脸书、亚马逊和推特。

是否可以使用相同的代码库来实现这一点,或者我必须使用它们的sdk类和JavaScripts将它们分开地隐藏起来?

我可以毫无问题地做到这一点,但我的直觉真的不喜欢它有几个原因(维护、灵活性、添加新的供应商等等)

共有1个答案

方俊
2023-03-14

提供程序之间有很多相似之处,基本流程也是一样的。浏览器中通常不需要任何Javascript。每个提供者给你的只是一个帮助者,让你的事情变得更容易(如果你只是关心他们的话)。

你好像在做一个网站。因此,您需要实现的OAuth2流称为授权代码流。归根结底,这只是几个遵循非常相似模式的http请求:

  1. 将用户重定向到提供程序
  2. 登录和同意页面
  3. 代码
  4. 重定向回您的站点(到注册的回调地址)
  5. 您的网站使用步骤3中的代码client_id/client_secret(实质上是web服务器的凭据。
  6. )从提供程序请求 access_token
  7. 使用#4中获得的access_token调用提供程序API。
  • 权限作用域,这在不同的提供程序之间是不同的。例如:脸书有很多选项,对你要求用户披露的内容(如朋友、照片等)有非常细粒度的控制。LinkedIn有更少的内容(例如个人资料,你的网络,通知)。Amazon只有两个(name,postal_code).

这些都是非常特定于提供者的,因为它们与他们所管理的资源相关联。请注意,OAuth本质上是一个授权协议(通常用于身份验证)。在许多情况下,如果您不打算调用它们的API,那么您可以使用最小范围。

  • 用户配置文件信息。大多数提供程序都有/userprofileendpoint来检索登录用户的属性。但通常,每个模式通常实现不同的模式:有些使用email,另一些则调用emailaddress。与last_namefamily_name等类似。

对于我们的系统,我们选择在可能的情况下将所有内容映射到OpenID Connectuserinfo标准声明。并不总是可能的,因为提供者通常提供更多的信息。(以下是我们实际提供的)

关于你的边注:你是对的,总是使用SSL的好理由。这也是一些提供商增加多因素身份验证的原因之一。

 类似资料:
  • 是否可以在没有实体的情况下使用JpaRepository?在这种情况下,将其替换为DTO。 如下示例所示 这种情况有替代方案吗? 注意:DTO已经映射,但我不想创建视图来将此DTO转换为实体。 我已经验证了这个主题,但没有重大进展,请使用无实体的JpaRepository交互样式 我在试这个 接口- 公共接口BffDTOInterface2{ } 我有这个错误

  • 我想使用并使其直接进入给定的url,而不是从ribbon配置中获取主机。 我知道在Spring,cloud-feign默认与ribbon和eureka一起出现。 根据这个:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html#spring-cloud-ribbon-without-eure

  • 我正在尝试构建一个基本的REST服务,它使用Spring Security和OAuth2.0身份验证和授权进行安全保护。 我试图限制所涉及的元素,所以我不是复制粘贴依赖于Spring bean、Spring MVC等的Spring Security Oath XML配置,而是直接使用Spring Security Oauth类。 尝试从/oauth/Token获取访问令牌时遇到了一个障碍。我可能缺

  • 问题内容: 我正在寻找没有浏览器的Javascript编程。我想从Linux或MacOSX命令行运行脚本,就像我们运行任何其他脚本语言(ruby,PHP,Perl,Python …)一样 我研究了spider monkey(Mozilla)和v8(Google),但它们似乎都是嵌入式的。 是否有人将Javascript作为脚本语言从命令行执行? 如果有人好奇,为什么我期待到这一点,我一直在关注着N

  • 我正在开发一个服务器端应用程序,即RESTAPI。用户可以通过这个API将自己手工制作的客户端的数据发布到我们自己的系统中。当然,我会记录数据的格式。但我的问题是,使用OAuth2实现身份验证是明智之举,还是我最好只使用SSL基本身份验证路由?若然,原因为何?我在谷歌上搜索了大量关于OAuth2的帖子和指南,如果不是他们正在处理的客户端,那就是Spring Security组合,我发现它很难遵循,

  • 我试图在不使用Box2D的情况下为libgdx角色(玩家和敌人)实现碰撞检测。正如我所读到的那样,Box2D支持内置碰撞检测,但由于我的游戏不涉及环境中的任何物理因素,因此我不习惯仅为此使用Box2D。 我发现的许多示例通过为此定义一个边界框(矩形)来启用冲突检测,但我正在寻找一个内置的解决方案。