用Stormpath登录LinkedIn

che*_*ane 3 swift stormpath swift2

我可以使用LinkedIn SDK快速获取我的LinkedIn帐户的访问令牌.如何使用Stormpath对此登录进行身份验证?

[更新]

让APIURL =" https://api.stormpath.com/v1/applications/ LI_APPLICATION_ID/accounts"

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我将accessToken从linkedin传递到上面的函数,但它返回结果如下:

["message":需要身份验证.,"status":401,"code":401,"developerMessage":需要使用有效API密钥进行身份验证.,"moreInfo":http://www.stormpath.com/docs /快速启动/连接]

我在做什么?

Edw*_*ang 5

LinkedIn是一个有趣的野兽,因为他们的移动SDK有两个缺点:

  • 最终用户需要安装LinkedIn应用程序,否则"登录"按钮会将用户重定向到App Store.
  • 移动访问令牌不能在服务器上使用.从LinkedIn的iOS文档中查看此屏幕截图

所以 - 为了让auth在移动设备上工作,我建议使用服务器来处理流量,所以你不必担心这两个缺点.这大致是:

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

声音复杂吗?它实际上比看起来更直接.我实际上使用Express.js和Swift为这个流编写了一些演示代码,如果你想试试的话.请让我知道这对你有没有用!