首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Android应用程序登录请求都显示为一个IP

如何使Android应用程序登录请求都显示为一个IP
EN

Stack Overflow用户
提问于 2019-05-07 12:02:50
回答 2查看 463关注 0票数 0

我正在开发一个本地Android应用程序,它必须通过SOAP与Salesforce组织进行交互。目前,应用程序的用户登录时,必须在用户名和密码旁边提供安全令牌。这使得登录/注册过程冗长而复杂,令人不舒服。据我所见,唯一的解决方案是白名单我的Salesforce org中的每个IP地址。我原以为这是一个安全问题,所以我想知道是否有更好的解决办法。

据我所知,一种解决方案是将我的应用程序配置为通过代理登录,然后只需白名单该代理的地址。正是在研究这个问题的过程中,我发现了这个https://serverfault.com/questions/514716/whats-the-minimum-required-squid-config-to-make-a-public-proxy-server,这让我想到,也许还有其他一些更成熟的方法来做到这一点,而我并没有意识到。

基本上,我的问题是,运行在任何手机上的android应用程序是否有办法向外部API发出请求,而这些API似乎都来自一个IP地址(可能是通过代理服务器)(而不做任何“诡计”)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-08 05:36:19

看来你在解决错误的问题。你为什么这么想绕过SF的安全功能。

尝试使用REST而不是SOAP登录到SF。您将收到的会话id可以在任何API中使用。因此,如果您使用OAuth2登录,可能不需要安全令牌。您需要使用者id和机密(但这只是在SF中安全生成的一对值,而不是绑定到任何特定用户。您甚至可以使用产品的值登录沙箱)。

如果你想做对的话,就会有大量阅读。以及创建“连接应用程序”的一些前提步骤。如果可能的话,检查你的Android库是否有内置的OAuth登录(到SF,Gmail,Facebook,LinkedIn,Twitter)。你可以在几个地方找到OAuth/OpenId )

如果你想要纯背景连接,而用户没有意识到他正在与Salesforce通信--也许"用户名和密码“OAuth流对你来说是最好的。与SOAP登录调用相比,这应该是代码中的最小变化。从某种意义上说,它很弱,您仍然需要一个密码(用户的密码或某个专用的集成帐户)--但是可能不需要安全令牌。试一试(下面的例子),并检查用户的登录历史记录中是否有错误。

如果您的用户有适当的SF帐户,那么也许另一个OAuth流更好。一个理想的显示他们的SF登录页面,他们信任,并只是重定向回您的应用程序时,登录成功。(如果您最近使用了,您可能会看到类似的情况。)这样,你的应用程序就不会看到密码,只会看到结果。即使你的客户想要使用自定义域,决定启用单点登录.

抱歉,身份验证,授权是个很大的话题。但是有更好的方法所以我希望你在把自己编码到角落之前做出一个有意识的决定.如果帮助材料太干/太新&充满了关键字,那么可以尝试传递一些标记:

您的SOAP登录可能是这样的:

代码语言:javascript
复制
POST
    https://test.salesforce.com/services/Soap/c/45.0/
HEADERS
    Content-Type: text/xml;charset=UTF-8
    SOAPAction: ""
PAYLOAD
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:enterprise.soap.sforce.com">
       <soapenv:Body>
          <urn:login>
             <urn:username>uptonogood@example.com</urn:username>
             <urn:password>Nice_Try!111 + security token</urn:password>
          </urn:login>
       </soapenv:Body>
    </soapenv:Envelope>

相应的OAuth登录(被迫返回XML,尽管移动应用程序应该“更喜欢”JSON,所以如果您想-丢弃我添加的Accept头)

代码语言:javascript
复制
POST
    https://test.salesforce.com/services/oauth2/token
HEADERS
    Content-Type:application/x-www-form-urlencoded
    Accept:application/xml
PAYLOAD
    grant_type=password&
    client_id=3MVG9fTLmJ60pJ5JaGv0NNHD5nh6P...&
    client_secret=3437814...&
    username=uptonogood@example.com&
    password=Nice_Try!111
票数 1
EN

Stack Overflow用户

发布于 2019-05-07 12:15:37

正确的方法是拥有自己的后端,通过后端代理请求。

例如:

Android app -> Your backend -> Salesforce

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56022197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档