2016-05-03 77 views
3

我能够使用LinkedIn SDK快速获取LinkedIn LinkedIn帐户的访问令牌。如何使用Stormpath验证此登录信息?LinkedIn登录Stormpath

[更新]

设APIURL = “https://api.stormpath.com/v1/applications/LI_APPLICATION_ID /帐户”

func sendRequestWithJSON(accessToken:String) 
{ 
    let json = [ "providerData" : ["providerId": "linkedin", "accessToken": accessToken] ] 


    do { 

     let jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: .PrettyPrinted) 

     let username = STORMPATH_API_KEY_ID 
     let password = STORMPATH_API_KEY_SECRET 
     let loginString = NSString(format: "%@:%@", username, password) 
     let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)! 
     let base64LoginString = loginData.base64EncodedDataWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 

     // create post request 
     let url = NSURL(string: APIURL)! 
     let request = NSMutableURLRequest(URL: url) 
     request.HTTPMethod = "POST" 


     // insert json data to the request 
     request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization") 
     request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 
     request.HTTPBody = jsonData 


     let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in 
      if error != nil{ 
       print("Error -> \(error)") 
       return 
      } 

      do { 
       let result = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject] 

       print("Result -> \(result)") 

      } catch { 
       print("Error -> \(error)") 
      } 
     } 

     task.resume() 
     //return task 
    } catch { 
     print(error) 
    } 
} 

我传递的accessToken从LinkedIn到上述功能取得,但它返回以下结果:

[“message”:需要认证,“status”:401,“code”:401,“developerMessage”:A必须使用有效的API密钥进行验证。“moreInfo”:http://www.stormpath.com/docs/quickstart/connect]

我在做什么?

+1

[iOS linkedin认证]的可能重复(http://stackoverflow.com/questions/28491280/ios-linkedin-authentication) – JAL

+1

我不认为它是重复的。链接的问题是询问关于vanilla LinkedIn登录,而这个问题是关于Stormpath支持的应用程序。 –

回答

5

LinkedIn是一个有趣的东西,因为它们的移动SDK有两个缺陷:

所以 - 获得身份验证的移动工作,我会建议使用一个服务器来处理流量,所以你不必担心这两个缺点。这大致是:

  1. 该应用程序会将用户重定向到您的网络服务器。
  2. 网络服务器开始LinkedIn认证流程,并将用户重定向到LinkedIn。
  3. 用户登录LinkedIn,并被重定向回您的网络服务器。
  4. 网络服务器读取响应,并与LinkedIn交换授权码以获取访问令牌。
  5. 网络服务器将您的用户重定向回应用程序,使用自定义网址方案向其发送LinkedIn访问令牌。
  6. 该应用程序使用LinkedIn访问令牌登录到Stormpath。

听起来很复杂吗?这实际上比看起来更直接。如果你想尝试一下,我其实写了一些demo code for this flow using Express.js & Swift。请让我知道这对你有没有用!

+0

谢谢爱德华的帮助。 让我试试你提供的例子(将接受它作为回答一次;)) –

+0

嗨,爱德华,你能告诉我什么设置我需要做与迅速项目来运行你的应用程序?我无法在模拟器上运行此应用程序。 –

+0

你有什么错误?它应该开箱即用。 –