Authentication 对于这种特殊情况,Oauth2流应该选择什么?

Authentication 对于这种特殊情况,Oauth2流应该选择什么?,authentication,oauth-2.0,Authentication,Oauth 2.0,我的服务器上有一个单页应用程序(称之为Collector),希望我的用户有一个可自定义的链接列表,如: facebook.com/get\u my\u关于猫的最新帖子 github.com/get_my_comments_for_repo_LinuxKernel anynews.com/获取我的足球新闻 他们每次都可以在链接对话框中添加/删除链接 因此,我想做的是减轻用户每次登录的痛苦,以便从facebook、github、news…服务器获取数据 当然,用户第一次点击任何链接时,都会收到该链接

我的服务器上有一个单页应用程序(称之为
Collector
),希望我的用户有一个可自定义的链接列表,如:

facebook.com/get\u my\u关于猫的最新帖子
github.com/get_my_comments_for_repo_LinuxKernel
anynews.com/获取我的足球新闻

他们每次都可以在链接对话框中添加/删除链接

因此,我想做的是减轻用户每次登录的痛苦,以便从
facebook、github、news…
服务器获取数据

当然,用户第一次点击任何链接时,都会收到该链接的相应登录页面(例如,
facebook.com/get\u my\u latest\u posts\u about\u cats
->
facebook.com/login
)但之后,我将使用他们的访问令牌和存储在我的
收集器数据库中的刷新令牌,这样他们就不必每次都写入密码和用户名

我的问题:

(请告诉我,至少它是否有意义,这样我就不会对它的工作原理有任何错误的想法)

  • 我不知道我应该实现我的
    收集器
    web应用程序的流程是什么,因为我是第一次这样做,而且整个
    身份验证过程对我来说也是新的,那么哪一个真正适合我的需要呢
  • 我考虑了flow,因为我不想在我的
    收集器
    数据库中存储
    客户机密

对于单页应用程序,通常最好使用隐式流。这样,访问令牌只到达前端部分-停留在浏览器中,而不到达收集器后端,因为访问令牌位于OAuth2服务器重定向URL的散列部分(在“#”)后面。然后,您可以将访问令牌存储在浏览器的会话存储中,以便在重新加载后继续使用。但是如果使用此流,则必须使用HTTPS,否则它就不安全(访问令牌通过不安全的通道传输)


也许你会想在现有代币到期之前获得新的代币。通常使用iFrame来完成,但这取决于具体的OAuth2服务器实现。您可以检查OpenId Connect(这是OAuth2扩展)。

感谢您抽出时间!第一次做一件事时会出现很多新手问题。是的,如果您需要在没有太多经验的情况下做出决策,OAuth2可能是一个相当大的挑战。不过还有一件事,如果我实现隐式流程,当我的用户第一次想要收到他的facebook帖子时,我的js脚本会向facebook服务器发出请求,告诉它需要登录页面,在我发出的请求中包含客户端id,这是我在facebook开发者网站上注册我的
收集器
Web应用程序时得到的id。所以我的后端
Collector
code不需要任何更改?如果我有任何错误,请让我知道:)我没有使用Facebook,但我认为这是正确的,因为你写的-客户端id是你注册的应用程序的id,你在请求身份验证时在URL中传递它。稍后,您应该只使用JavaScript代码与Facebook通信,因此不需要更改后端。