Tidak mudah menggunakan LinkedIn API resmi dan saya tidak dapat menemukan dokumentasi yang valid.

Mengikuti dokumentasi resmi saya membuat aplikasi baru untuk mendapatkan ID Klien dan Rahasia Klien

Saat ini saya melakukan panggilan POST melalui Postman ke https://www.linkedin.com/oauth/ v2/accessToken inilah yang saya dapatkan:

{
    "error": "invalid_grant_type",
    "error_description": "The passed in grant_type is invalid"
}

enter image description here

Di mana saya salah?

EDIT SETELAH BANTUAN DARI @Amit Singh

Berkat @AmitSingh saya dapat membuat 2 aplikasi berbeda, pengujian dengan alur Kredensial Klien memberi saya hasil kesalahan saat mengambil token:

enter image description here

{
    "error": "access_denied",
    "error_description": "This application is not allowed to create application tokens"
}

Saat saya mencoba menggunakan LinkedIn 3-legged workflow saya menerima Unauthorized

enter image description here

EDIT 3: MENDAPATKAN KE SANA MELALUI POSTMAN

Sekarang saya melihat bahwa saya dapat meminta Postman untuk melakukan pekerjaan itu, namun ketika saya menekan Get New Access Token itu membuka halaman kesalahan. Saya percaya kesalahannya mungkin ada di 4 elemen ini:

enter image description here

  • Token name: mungkin saya harus memberikan nama token khusus?
  • Auth URL: Saya menyetel https://www.getpostman.com/oauth2/callback seperti yang dijelaskan di sini tapi mungkin saya sudah untuk mengatur sesuatu yang lain?
  • Access Token URL: Saya membiarkannya kosong, mungkin saya harus meletakkan sesuatu di sini?
  • State: Saya menetapkan string acak seperti Hello123Boy tapi mungkin saya harus memasukkan sesuatu yang lain. Mungkin terlalu lama. Mungkin terlalu pendek. Mungkin harus mengandung simbol, dll... ?

...Juga, dalam panduan yang Anda tautkan dikatakan bahwa aplikasi harus memiliki:

  • r_liteprofile
  • rw_perusahaan_admin
  • w_member_social

Milikku tidak punya apa-apa:

enter image description here

Sedang dibuat baru-baru ini masih dalam peninjauan. Dikatakan itu bisa memakan waktu hingga 90 hari. Benarkah?

enter image description here

EDIT ke-4: SAYA INGIN PERCAYA!

Ini dia, setidaknya sekarang saya mendapatkan kesalahan: Bummer, something went wrong. The redirect_uri does not match the registered value. Ini luar biasa: akhirnya kesalahan yang mengatakan di mana masalahnya!

enter image description here

Pada aplikasi, pada tab Produk, saya memilih Sign In with LinkedIn. Sebagai URL pengalihan resmi untuk aplikasi Anda, saya setel https://www.getpostman.com/oauth2/callback

enter image description here

Di Tukang Pos saya menyiapkan Auth URL dan Access Token URL seperti yang Anda katakan:

enter image description here

3
Francesco Mantovani 21 Desember 2020, 00:45

2 jawaban

Dengan asumsi Anda telah membuat aplikasi Anda, menambahkan URL pengalihan yang benar dan mengaktifkan "Masuk dengan LinkedIn" produk untuk aplikasi Anda, masalah yang Anda alami mungkin adalah bahwa panggilan pertama mengembalikan halaman login tempat pengguna Anda seharusnya mengautentikasi.

  1. kirimkan permintaan ke https://www.linkedin.com/oauth/v2/authorization (Anda tampaknya telah melakukannya)
  2. parsing respons langkah 1 dan ekstrak semua nilai formulir, tambahkan nama pengguna dan kata sandi untuk mensimulasikan login pengguna
  3. buat permintaan POST dan gunakan nilai dari langkah sebelumnya sebagai data x-www-form-urlencoded
  4. secara manual ikuti tajuk pengalihan dari langkah 3
  5. catat header redirect kedua tetapi jangan ikuti - alih-alih ekstrak kodenya
  6. POST kode dari langkah sebelumnya ke https://www.linkedin.com/oauth/v2/accessToken dan dapatkan access_token sebagai tanggapan

Dari sini, saya berhasil melakukan transisi ke kode auth dengan mengikuti langkah-langkahnya. Saya tidak yakin apakah Anda menggunakan Tukang Pos online, tetapi inilah file ekspor koleksi lengkap saya untuk referensi:

{
    "info": {
        "_postman_id": "397761c9-4287-43f2-860a-3c34cb710d50",
        "name": "Linkedin oAuth",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "01 request Login form",
            "event": [
                {
                    "listen": "test",
                    "script": {
                        "exec": [
                            "const $ = cheerio.load(pm.response.text());\r",
                            "var inputs = $('form').serializeArray();\r",
                            "var payload = '';\r",
                            "inputs.forEach(i => {\r",
                            "    payload += encodeURIComponent(i.name)+ '=' + encodeURIComponent(i.value) + '&';\r",
                            "})\r",
                            "payload += 'session_key='+ encodeURIComponent(pm.collectionVariables.get('username')) + '&'\r",
                            "payload += 'session_password='+ encodeURIComponent(pm.collectionVariables.get('password'))\r",
                            "\r",
                            "pm.collectionVariables.set(\"form_data\", payload);"
                        ],
                        "type": "text/javascript"
                    }
                }
            ],
            "request": {
                "method": "GET",
                "header": [],
                "url": {
                    "raw": "https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id={{client_id}}&redirect_uri={{redirect_uri}}&scope=r_liteprofile&state={{$guid}}",
                    "protocol": "https",
                    "host": [
                        "www",
                        "linkedin",
                        "com"
                    ],
                    "path": [
                        "oauth",
                        "v2",
                        "authorization"
                    ],
                    "query": [
                        {
                            "key": "response_type",
                            "value": "code"
                        },
                        {
                            "key": "client_id",
                            "value": "{{client_id}}"
                        },
                        {
                            "key": "redirect_uri",
                            "value": "{{redirect_uri}}"
                        },
                        {
                            "key": "scope",
                            "value": "r_liteprofile"
                        },
                        {
                            "key": "state",
                            "value": "{{$guid}}"
                        }
                    ]
                }
            },
            "response": []
        },
        {
            "name": "02 Submit login form",
            "event": [
                {
                    "listen": "prerequest",
                    "script": {
                        "exec": [
                            ""
                        ],
                        "type": "text/javascript"
                    }
                },
                {
                    "listen": "test",
                    "script": {
                        "exec": [
                            "var url = 'https://www.linkedin.com'+ pm.response.headers.get(\"Location\");\r",
                            "pm.collectionVariables.set('first_redirect', url);\r",
                            "//console.log(pm.collectionVariables.get('first_redirect'));"
                        ],
                        "type": "text/javascript"
                    }
                }
            ],
            "protocolProfileBehavior": {
                "followRedirects": false
            },
            "request": {
                "method": "POST",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/x-www-form-urlencoded",
                        "type": "text"
                    }
                ],
                "body": {
                    "mode": "raw",
                    "raw": "{{form_data}}",
                    "options": {
                        "raw": {
                            "language": "text"
                        }
                    }
                },
                "url": {
                    "raw": "https://www.linkedin.com/checkpoint/lg/login-submit",
                    "protocol": "https",
                    "host": [
                        "www",
                        "linkedin",
                        "com"
                    ],
                    "path": [
                        "checkpoint",
                        "lg",
                        "login-submit"
                    ]
                }
            },
            "response": []
        },
        {
            "name": "03 handle login-success redirect",
            "event": [
                {
                    "listen": "test",
                    "script": {
                        "exec": [
                            "var sdk = require('postman-collection');\r",
                            "var redirect = new sdk.Url(pm.response.headers.get(\"Location\"));\r",
                            "pm.collectionVariables.set('code', redirect.query.filter(q => q.key === 'code').map(k => k.value)[0]);\r",
                            "//console.log(pm.collectionVariables.get('code'));"
                        ],
                        "type": "text/javascript"
                    }
                },
                {
                    "listen": "prerequest",
                    "script": {
                        "exec": [
                            "console.log(pm.variables.get('first_redirect'));\r",
                            "pm.request.url.update(pm.variables.get('first_redirect'));"
                        ],
                        "type": "text/javascript"
                    }
                }
            ],
            "protocolProfileBehavior": {
                "followRedirects": false
            },
            "request": {
                "method": "GET",
                "header": [],
                "url": {
                    "raw": "{{first_redirect}}",
                    "host": [
                        "{{first_redirect}}"
                    ]
                }
            },
            "response": []
        },
        {
            "name": "04 Get Auth Code",
            "request": {
                "method": "POST",
                "header": [],
                "url": {
                    "raw": "https://www.linkedin.com/oauth/v2/accessToken?grant_type=authorization_code&code={{code}}&redirect_uri={{redirect_uri}}&client_id={{client_id}}&client_secret={{client_secret}}",
                    "protocol": "https",
                    "host": [
                        "www",
                        "linkedin",
                        "com"
                    ],
                    "path": [
                        "oauth",
                        "v2",
                        "accessToken"
                    ],
                    "query": [
                        {
                            "key": "grant_type",
                            "value": "authorization_code"
                        },
                        {
                            "key": "code",
                            "value": "{{code}}"
                        },
                        {
                            "key": "redirect_uri",
                            "value": "{{redirect_uri}}"
                        },
                        {
                            "key": "client_id",
                            "value": "{{client_id}}"
                        },
                        {
                            "key": "client_secret",
                            "value": "{{client_secret}}"
                        }
                    ]
                }
            },
            "response": []
        }
    ],
    "event": [
        {
            "listen": "prerequest",
            "script": {
                "type": "text/javascript",
                "exec": [
                    ""
                ]
            }
        },
        {
            "listen": "test",
            "script": {
                "type": "text/javascript",
                "exec": [
                    ""
                ]
            }
        }
    ],
    "variable": [
        {
            "key": "client_id",
            "value": "your app id"
        },
        {
            "key": "client_secret",
            "value": "your app secret"
        },
        {
            "key": "redirect_uri",
            "value": "your urlencoded redirect uri such as https%3A%2F%2Flocalhost%3A8080"
        },
        {
            "key": "username",
            "value": "user login"
        },
        {
            "key": "password",
            "value": "user password"
        }
    ]
}
0
timur 28 Desember 2020, 09:46

Terima kasih kepada @timur dan @AmitSingh saya akhirnya tiba untuk mengautentikasi ke LinkedIn API.

Solusi langkah demi langkah singkat dalam gambar:

  • URL pengalihan resmi untuk aplikasi Anda = https://oauth.pstmn.io/v1/callback

  • Cakupan OAuth 2.0 = harus memiliki r_emailaddress dan r_liteprofile

  • Di Tab Produk, set Sign In with LinkedIn

enter image description here

Sekarang buka Postman > Collections > New Collection > Authorization dan atur parameter seperti pada gambar:

enter image description here

  • JENIS = OAUTH 2.0
  • Nama Token = taruh apapun yang kamu mau
  • URL Panggilan Balik = https://oauth.pstmn.io/v1/callback (harus berwarna abu-abu setelah Anda mencentang Authorize using browser)
  • Centang Authorize using browser
  • URL Otentikasi = https://www.linkedin.com/oauth/v2/authorization
  • URL Token Akses = https://www.linkedin.com/oauth/v2/accessToken
  • ID Klien = ID Klien yang Anda temukan di Aplikasi LinkedIn Anda
  • Rahasia Klien = Rahasia Klien yang Anda temukan di Aplikasi LinkedIn Anda
  • Cakupan = r_liteprofile r_emailaddress
  • State = taruh apapun yang kamu suka

Sekarang klik Get New Access Token, sebuah halaman akan terbuka di browser Anda dan Anda akan dapat masuk menggunakan akun LinkedIn Anda. Setelah selesai, Anda diautentikasi.

Sekarang gunakan kode yang disediakan oleh @timur dan pada Postman, buka Impor > Unggah File dan impor file .JSON itu. Anda sekarang akan memiliki 4 kueri dan Anda dapat menarik dan melepasnya di koleksi Anda.

0
Francesco Mantovani 3 Januari 2021, 21:52