salesforce lightning使用用户代理OAuth流从另一个组织授权一个组织并存储访问令牌

时间:2018-07-19 06:43:44

标签: javascript oauth-2.0 salesforce-lightning

  1. 我已连接在组织2中创建并启用OAuth的应用。

  2. 我在拥有闪电应用的org1中使用OAuth2.0用户代理工作流程。

  3. 在闪电组件页面中单击按钮(名为auth target org)

  4. window.open(endpturl,'_ self'); var currLoc = window.location.href; alert(“ Curr Loc是:'+ currLoc); ” //从单击按钮的位置打印URL(命名为auth target org)。预期此语句将在步骤7之后执行。因此无法捕获访问令牌。

  5. 重定向到salesforce授权/登录页面。

  6. 输入用户凭据->单击“允许访问”。

  7. 根据连接的应用程序配置的重定向URL重定向到 https://business-momentum-162-dev-ed.cs2.my.salesforce.com/services/oauth2/success#access_token=abc&instance_url=https%3A%2F%2Fdream-innovation-4602-dev-ed.cs40.my.salesforce.com&id=https%3A%2F%2Ftest.salesforce.com%2Fid%2F00D540000009LzUEAU%2F00554000000zjC5AAI&issued_at=1531980498349&signature=abc&scope=id+api&token_type=Bearer

但是我无法捕获访问令牌,因为在步骤7之前执行了步骤4。因此无法捕获访问令牌。请告诉我是否有办法获取/捕获访问令牌。

    client side controller code (**using window object**):
    ({ AuthTargetOrg : function (component, event, helper) {

    var endpturl = 'https://test.salesforce.com/services/oauth2/authorize?response_type=token&client_id=abc123&redirect_uri=https%3A%2F%2Fbusiness-momentum-162-dev-ed.lightning.force.com%2Fservices%2Foauth2%2Fsuccess';

    window.open(endpturl,'_self');
    var currLoc = window.location.href;
    alert ('Curr Loc is:  ' + currLoc); //  prints home page URL from where I clicked "auth target org" button, rather this statement expected to execute after step 7.
   )}

关于, PJS

1 个答案:

答案 0 :(得分:0)

我相信您需要使用Apex处理Oauth舞蹈的重定向。我自己一直在为此挣扎,问题是在闪电组件中,您无法直接对Salesforce端点进行API调用,它将引发各种错误。但是我确实找到了以下代码示例:

https://balkishankachawa.wordpress.com/tag/oauth-with-lightning/

基本上,解决方案是使用Apex和Lightning Out。使用Apex可以从Salesforce身份验证接收重定向,而重定向又可以获取令牌并将其传递回闪电组件。