使用OAuth 2.0令牌登录Salesforce.com



目前我们没有使用OAuth与我们的应用程序,但我们正在努力做出转变,我们有直接登录和捕获用户/通行证输入和存储这些。然后,我们将存储的凭据用于允许用户在Salesforce.com中打开记录的功能,我们将用户/传递到登录端点以及特定记录的起始URL,这工作得很好,并且是一个很受欢迎的功能,因为它是从应用程序到Salesforce.com的简单SSO,用户可以看到应用程序中可能不可见的所有数据。

迁移到OAuth 2.0并使用标准的webflow,我们不再能够捕获用户/通行证,这实际上是一件好事,就安全而言。然而,我们希望保持这个功能,是否有通过传递一个OAuth令牌或某种会话id来SSO到Salesforce.com ?

在阅读了更多内容并思考OAuth完成了什么之后,我觉得这可能是不可能的,因为获得的令牌仅用于API而不是用于前端系统。我希望我是错的,但是有一种方法可以使用这些令牌登录到前端。

编辑

好的,我正在编辑,希望能使这更清楚。目前用户的身份验证使用login() API方法和他们的用户/通行证,我们将这个用户/通行证存储在本地(不理想)。然后我们同步用户可以在应用程序内随时访问的数据子集,因为它是一个子集,我们有一个"单点登录"到Salesforce.com前端的功能。这只是在web视图(UIWebView)中使用URL https://ns8.salesforce.com/?pw=PASSWORD&un=username@example.com&startURL=/recordId打开Salesforce.com。这将使我们登录到Salesforce.com并打开指定的记录。

我们希望在web流中使用OAuth 2.0,这样我们就不需要处理用户/通行证,这样我们就不必处理安全令牌或打开特定的IP范围来允许在没有安全令牌的情况下登录。

话是这么说的,是否有办法使用从OAuth认证接收到的令牌/凭据来打开Salesforce.com,自动登录用户,并进入特定的记录?

我之前可能误用了"单点登录",但从某种意义上说,这模拟了从我们的应用程序到Salesforce.com的单点登录,因为我们的用户可以触摸应用程序中的单个按钮并登录到Salesforce.com的web界面。

当你请求一个OAuth令牌时,你可以指定它的作用域,选项只包括api(令牌的原始类型),或者其他选项,包括在UI页面上使用令牌的能力。(请参阅帮助中的作用域参数细节)。其中一个仍然缺失的部分是一种方法来引导UI与令牌时,你所能做的就是告诉浏览器/webview去一个URL,但一个广泛使用(但不支持)的方式是通过frontdoor.jsp,例如,你会打开https://{instance}/secur/frontdoor.jsp?sid={the_Access_token}&retURL={optional_relative_url_to_open}记得URLEncode这两个值。

所以我想你说你的应用程序使用SFDC用户名和密码来验证从SFDC检索记录以显示在你的应用程序中?

如果这是正确的——我认为是正确的——那么你可以使用标准的Salesforce单点登录系统进行身份验证。这里有一个指南,概述了设置SAML SSO系统的过程,Pat Patterson撰写了一个有趣的特性,介绍了安全系统如何在这里工作。他还在DeveloperForce上写了一篇很棒的博客文章,介绍了Force.com的OAuth的基本细节,而不仅仅是SAML设置。我已经在iPad应用程序中使用了OAuth系统来对抗SFDC,它可以快速轻松地工作。我不明白为什么你的系统不能使用你想要的协议

直接访问Salesforce是SSO的一个关键优势。我不确定您在哪里读到Salesforce中的SSO仅是API。为您链接的SSO PDF文档:

使用单点登录,用户只需要记住一个密码即可访问网络资源或外部应用程序和Salesforce。当用户从公司网络内部访问Salesforce时无缝登录,无需提示输入用户名或密码。从公司外部访问Salesforce时网络,用户的企业网络登录工作将其登录。与需要管理的密码越少,系统管理员收到的密码就越少请求重置忘记的密码。

OAuth 1 &OAuth 2都支持,但我是OAuth 2的粉丝,因为OAuth 2有非常挑剔的附加步骤,涉及参数的顺序和编码序列。我最近编写了一个apex与twitter的集成,但很快意识到它不会像使用OAuth 2.0的Facebook那样简单。

但在您的情况下,听起来您只是想为用户提供实际登录Salesforce的能力,并在经过身份验证后进入特定的登录页面。这绝对是可行的。

祝你好运!

最新更新