Cách nhận Mã truy cập Instagram


76

Tôi thực sự đang vật lộn trong việc làm thế nào để có được mã thông báo truy cập cho Instagram,

Tôi đã đăng ký một khách hàng mới và sau đó tôi sử dụng URL này

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

để điền vào ID khách hàng và Url chuyển hướng.

Sau đó, tôi được chuyển hướng đến một trang nơi nó hiển thị mã trong Url nhưng từ đó tôi không có manh mối nơi id sau đó lấy mã thông báo truy cập của tôi.


1
Phản hồi thực sự muộn nhưng tôi đã phải làm lại điều này gần đây nên đã tạo một hướng dẫn (sẵn sàng cho khi tôi phải làm lại) xem: bobmckay.com/web/…
Mr Fett


Nhận một tài khoản với tài khoản instagram.pixelunion.net của bạn ... siêu dễ dàng.
nổi loạn

Câu trả lời:


48

Liên kết đến tài liệu API của bộ luật là http://instagram.com/developer/authentication/

Longstory ngắn - hai bước:

Nhận được mã

Mở https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code với thông tin từ http://instagram.com/developer/clients/manage/

Nhận mã thông báo truy cập

curl \-F 'client_id=CLIENT-ID' \
    -F 'client_secret=CLIENT-SECRET' \
    -F 'grant_type=authorization_code' \
    -F 'redirect_uri=YOUR-REDIRECT-URI' \
    -F 'code=CODE' \
    https://api.instagram.com/oauth/access_token

1
Đây là điều duy nhất làm việc cho tôi. Các câu trả lời khác ở trên không còn hoạt động. Tôi đã làm theo hướng dẫn này tại đây dmolsen.com/2013/04/05/generating-access-tokens-for-instagram
Phil

3
Có thể lấy mã từ https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=codetrực tiếp không? Hay tôi thực sự cần có một điểm cuối khác chỉ để bắt mã trả về? Nó trở nên phức tạp và khó chịu
tom10271

3
Nếu bạn đặt response_type thành mã thông báo thì nó sẽ hoạt động. Nó không hoạt động với mã cho tôi.
Rorok_89

@aokaddaoc Bạn không cần phải có thiết bị đầu cuối khác, Instagram sẽ chuyển hướng đến rằng URI đi qua các dấu hiệu trên URL, như tronghttp://your-redirect-uri#access_token=ACCESS-TOKEN
Bruno Peres

4
tại instagram thay đổi api của nó chúng ta không thể lấy mã
Shakti

12

Hầu như tất cả các câu trả lời mà mọi người đã đăng cho đến nay chỉ đề cập đến cách xử lý mã thông báo truy cập trên giao diện người dùng, tuân theo quy trình "xác thực ngầm" phía máy khách của Instagram. Phương pháp này kém an toàn hơn và không được khuyến khích theo tài liệu API của Instagram.

Giả sử bạn đang sử dụng một máy chủ, tài liệu Instagram không thành công trong việc cung cấp câu trả lời rõ ràng về việc trao đổi mã lấy mã thông báo, vì chúng chỉ đưa ra ví dụ về yêu cầu cURL. Về cơ bản, bạn phải thực hiện một yêu cầu ĐĂNG tới máy chủ của họ với mã được cung cấp và tất cả thông tin ứng dụng của bạn và họ sẽ trả về một đối tượng người dùng bao gồm thông tin người dùng và mã thông báo.

Tôi không biết bạn đang viết bằng ngôn ngữ nào, nhưng tôi đã giải quyết vấn đề này trong Node.js với mô-đun npm request mà bạn có thể tìm thấy tại đây .

Tôi đã phân tích cú pháp qua url và sử dụng thông tin này để gửi yêu cầu đăng bài

var code = req.url.split('code=')[1];

request.post(
  { form: { client_id: configAuth.instagramAuth.clientID,
            client_secret: configAuth.instagramAuth.clientSecret,
            grant_type: 'authorization_code',
            redirect_uri: configAuth.instagramAuth.callbackURL,
            code: code
          },
    url: 'https://api.instagram.com/oauth/access_token'
  },
  function (err, response, body) {
    if (err) {
      console.log("error in Post", err)
    }else{
      console.log(JSON.parse(body))
    }
  }
);

Tất nhiên, hãy thay thế thứ configAuth bằng thông tin của riêng bạn. Bạn có thể không sử dụng Node.js, nhưng hy vọng giải pháp này sẽ giúp bạn dịch giải pháp của riêng mình sang bất kỳ ngôn ngữ nào bạn đang sử dụng.


10

Tôi đã gặp sự cố tương tự trước đây, nhưng tôi thay đổi url này thành
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token


3
Vâng! - điều này hoạt động - theo cách mà instagram hoạt động ngay bây giờ, nó sẽ là câu trả lời tốt nhất cho các yêu cầu dựa trên máy chủ kém an toàn hơn. Ví dụ: Tôi chỉ cần lấy một vài hình ảnh cuối cùng cho một người dùng. -Uncheck Vô hiệu hóa OAuth không liên quan trong tab bảo mật của trang nhà phát triển instagram của bạn. -Sử dụng URL ở trên với các giá trị đã thay thế -nhận access_token từ URI chuyển hướng Bây giờ bạn có thể thực hiện những việc đơn giản như api.instagram.com/v1/users/[CLIENT ID] / media / near /? Access_token = [TOKEN] Những điều này không Dù sao thì cũng không cần phải bảo mật như vậy - instagram có những yêu cầu phức tạp như thế này.
Tycon

6

API Instagram không chỉ dành cho bạn mà còn cho bất kỳ người dùng Instagram nào có khả năng xác thực với ứng dụng của bạn. Tôi đã làm theo hướng dẫn trên trang web Instagram Dev . Sử dụng phương pháp đầu tiên (rõ ràng), tôi có thể thực hiện việc này khá dễ dàng trên máy chủ.

Bước 1) Thêm liên kết hoặc nút vào trang web của bạn mà người dùng có thể nhấp vào để bắt đầu quá trình xác thực:

<a href="https://api.instagram.com/oauth/authorize/?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code">Get Started</a>

YOUR_CLIENT_IDYOUR_REDIRECT_URIsẽ được cung cấp cho bạn sau khi bạn đăng ký thành công ứng dụng của mình trong phần phụ trợ của Instagram, cùng với phần YOUR_CLIENT_SECRETđược sử dụng bên dưới.

Bước 2) Tại URI mà bạn đã xác định cho ứng dụng của mình, cũng giống như YOUR_REDIRECT_URI, bạn cần chấp nhận phản hồi từ máy chủ Instagram. Máy chủ Instagram sẽ cung cấp cho bạn một codebiến trong yêu cầu. Sau đó, bạn cần sử dụng codethông tin này và các thông tin khác về ứng dụng của mình để thực hiện một yêu cầu khác trực tiếp từ máy chủ của bạn để lấy access_token. Tôi đã làm điều này trong python bằng cách sử dụng khuôn khổ Django, như sau:

trực tiếp django đến responsehàm trong urls.py:

from django.conf.urls import url

from . import views

app_name = 'main'
urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^response/', views.response, name='response'),
]

Đây là responsechức năng, xử lý yêu cầu, views.py:

from django.shortcuts import render
import urllib
import urllib2
import json

def response(request):
    if 'code' in request.GET:
        url = 'https://api.instagram.com/oauth/access_token'
        values = {
            'client_id':'YOUR_CLIENT_ID',
            'client_secret':'YOUR_CLIENT_SECRET',
            'redirect_uri':'YOUR_REDIRECT_URI',
            'code':request.GET.get('code'),
            'grant_type':'authorization_code'
        }
        data = urllib.urlencode(values)
        req = urllib2.Request(url, data)
        response = urllib2.urlopen(req)
        response_string = response.read()
        insta_data = json.loads(response_string)
        if 'access_token' in insta_data and 'user' in insta_data:
            #authentication success
            return render(request, 'main/response.html')
        else:
            #authentication failure after step 2
            return render(request, 'main/auth_error.html')
    elif 'error' in req.GET:
        #authentication failure after step 1
        return render(request, 'main/auth_error.html')

Đây chỉ là một cách, nhưng quá trình này phải gần như giống hệt trong PHP hoặc bất kỳ ngôn ngữ phía máy chủ nào khác.


6

Cách dễ dàng hoạt động trong năm 2019

Vô hiệu hóa oauth ngầm trong auth bảo mật và SAU ĐÓ tải cái này:

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

Chỉ định REDIRECT-URI trong tài khoản của bạn và nhập chính xác như đã chỉ định.


2

Mã thông báo truy cập được trả lại dưới dạng phân đoạn URI sau khi bạn cho phép ứng dụng sử dụng dữ liệu Instagram của mình. Nó sẽ trông giống như sau: nhập mô tả hình ảnh ở đây


5
Tôi vẫn hoàn toàn bị mất, tôi về cơ bản chỉ kéo feed Instagram của tôi vào trang web của tôi vì vậy tôi không biết làm thế nào để có được những gì youve hiển thị ở trên
Gerry Mckay

Có hai luồng khi cố gắng lấy mã thông báo truy cập. Đối với người mới bắt đầu, có vẻ dễ dàng nhất là sử dụng "Xác thực phía máy khách (ngầm)". Nếu không biết bạn đã thử những gì, hoặc chính xác bạn đang mắc kẹt ở đâu, thì thật khó để chỉ bạn đi đúng hướng. Tôi đã viết một blog ngắn cách đây vài tuần có thể hữu ích. đối
Adam

1
Phản hồi thực sự muộn nhưng tôi phải làm lại điều này gần đây nên đã tạo một hướng dẫn (sẵn sàng cho khi tôi phải làm lại), xem: bobmckay.com/web/…
Mr Fett

trong trường hợp này sử dụng javascript. access_token = location.hash.replace ('# access_token =', '');
user1021860

1

Thử cái này:

http://dmolsen.com/2013/04/05/generating-access-tokens-for-instagram/

sau khi nhận được mã, bạn có thể làm điều gì đó như:

curl -F 'client_id=[your_client_id]' -F 'client_secret=[your_secret_key]' -F 'grant_type=authorization_code' -F 'redirect_uri=[redirect_url]' -F 'code=[code]' https://api.instagram.com/oauth/access_token

1
chính xác thì redirect_URL là gì? Tôi không thể tìm thấy nó trong tài khoản quản lý của tôi trong bảng điều khiển phát triển instagram
Mona Jalal

1
Redirect_URL là url mà phản hồi của Instagram quay lại. Vì vậy, nó không có trong bảng điều khiển dành cho nhà phát triển. Đó là cái mà bạn tạo để nhận lại phản hồi trong ứng dụng / trang web của mình.
boyfromnorth

1

100% hoạt động mã này

<a id="button" class="instagram-token-button" href="https://api.instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&response_type=code">Click here to get your Instagram Access Token and User ID</a>
<?PHP
  if (isset($_GET['code'])) {

        $code = $_GET['code'];

        $client_id='< YOUR CLIENT ID >';
        $redirect_uri='< YOUR REDIRECT URL >';
        $client_secret='< YOUR CLIENT SECRET >';
        $url='https://api.instagram.com/oauth/access_token';

        $request_fields = array(
            'client_id' => $client_id,
            'client_secret' => $client_secret,
            'grant_type' => 'authorization_code',
            'redirect_uri' => $redirect_uri,
            'code' => $code
        );

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        $request_fields = http_build_query($request_fields);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $request_fields);
        $results = curl_exec($ch); 
        $results = json_decode($results,true);
        $access_token = $results['access_token'];

        echo $access_token;

        exit();
    }

?>

2
Chào mừng bạn đến với Stack Overflow! Mặc dù mã này có thể trả lời câu hỏi, nhưng tốt hơn là nên bao gồm một số ngữ cảnh, giải thích cách thức hoạt động và khi nào sử dụng nó. Các câu trả lời chỉ có mã có xu hướng ít hữu ích hơn về lâu dài. Xem Làm thế nào để tôi viết một câu trả lời tốt? để biết thêm thông tin.
Mark Ormesher


0

Điều này làm việc tốt cho tôi:

http://jelling.com/instagram/access-token

FYI, tôi đã sử dụng nó kết hợp với plugin jQuery Instagram mà bạn sẽ tìm thấy ở đây; http://potomak.github.com/jquery-instagram


3
Bạn có vui lòng chỉnh sửa câu trả lời của mình để cung cấp một lời giải thích thực chất hơn không? Các câu trả lời chỉ liên kết có xu hướng thu hút phiếu bầu gần gũi.
Gayot Fow

Thật không may, Instagram đã khiến anh ấy gỡ trang web của mình xuống. Nó đã từng hoạt động rất tốt.
Dex

0

Nếu bạn đang tìm kiếm để được hướng dẫn, kiểm tra bài viết này bài . Và nếu bạn đang sử dụng C # ASP.NET, hãy xem repo này .


1
và nó đã biến mất ... degs.io đã biến mất.
JP Hellemons

0

Bằng cách sử dụng https://www.hurl.it/, tôi có thể thấy thông tin này: {"code": 400, "error_type": "OAuthException", "error_message": "Không tìm thấy mã khớp hoặc đã được sử dụng." }

vì vậy: bạn phải lấy mã mới cho mọi yêu cầu.


0

Nếu bạn không muốn xây dựng phía máy chủ của mình, chẳng hạn như chỉ phát triển ở phía máy khách (ứng dụng web hoặc ứng dụng dành cho thiết bị di động), bạn có thể chọn Xác thực ngầm định .

Như tài liệu nói, trước tiên hãy thực hiện yêu cầu https với

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token

Điền vào CLIENT-IDREDIRECT-URL mà bạn đã chỉ định.

Sau đó, đó là đến trang đăng nhập, nhưng điều quan trọng nhất là làm thế nào để lấy mã thông báo truy cập sau khi người dùng đăng nhập chính xác.

Sau khi người dùng nhấp vào nút đăng nhập với cả tài khoản và mật khẩu chính xác, trang web sẽ chuyển hướng đến url mà bạn đã chỉ định, sau đó là mã thông báo truy cập mới.

http: // your-redirect-uri # access_token = ACCESS-TOKEN

Tôi không quen thuộc với javascript, nhưng trong Android studio, đó là một cách dễ dàng để thêm trình lắng nghe sự kiện mà trang web ghi đè url thành url mới (sự kiện chuyển hướng), sau đó nó sẽ chuyển chuỗi url chuyển hướng tới bạn, vì vậy bạn có thể dễ dàng tách nó để lấy mã thông báo truy cập như:

Chuỗi access_token = url.split ("=") [1];

Có nghĩa là ngắt url thành mảng chuỗi trong mỗi ký tự "=", khi đó mã thông báo truy cập hiển nhiên tồn tại tại [1].


-1

vào quản lý trang clinet trong:

http://www.instagram.com/developer/

đặt một url chuyển hướng

sau đó :

sử dụng mã này để nhận mã thông báo truy cập:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>tst</title>
<script src="../jq.js"></script>
<script type="text/javascript">
       $.ajax({
            type: 'GET',
            url: 'https://api.instagram.com/oauth/authorize/?client_id=CLIENT-‌​ID&redirect_uri=REDI‌RECT-URI&response_ty‌pe=code'
            dataType: 'jsonp'}).done(function(response){
                var access = window.location.hash.substring(14);
                //you have access token in access var   
            });
</script>
</head>
<body>  
</body>
</html>

Bạn có một dấu phẩy bị thiếu, ngay trước DataType: .... Tôi không thể chỉnh sửa vì SO cần thay đổi ít nhất 6 ký tự.
malteseKnight 23/07/17
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.