Twitter oAuth callbackUrl - phát triển localhost


112

Có ai gặp khó khăn khi lấy URL gọi lại của Twitters oAuth để tấn công môi trường phát triển localhost của họ không. Rõ ràng nó đã bị vô hiệu hóa gần đây. http://code.google.com/p/twitter-api/issues/detail?id=534#c1

Có ai có một cách giải quyết. Tôi không thực sự muốn dừng sự phát triển của mình


Nó hoạt động với tôi bằng cách đặt url gọi lại twitter thành url trang web thực của tôi. Trong khi thử nghiệm trong localhost -> đăng ký twitter, được chuyển hướng đến localhost (thay vì url trang web).
Sudhakar Krishnan

Câu trả lời:


135

Phương án 1.

Thiết lập tệp .hosts (Windows) hoặc etc / hosts của bạn để trỏ miền trực tiếp đến IP localhost của bạn. nhu la:

127.0.0.1 xyz.com

trong đó xyz.com là miền thực của bạn.

Phương án 2.

Ngoài ra, bài viết đưa ra mẹo để sử dụng dịch vụ rút gọn URL một cách thay thế. Hãy rút ngắn URL cục bộ của bạn và cung cấp kết quả dưới dạng gọi lại.

Phương án 3.

Hơn nữa, có vẻ như nó hoạt động để cung cấp ví dụ http://127.0.0.1:8080như gọi lại cho Twitter, thay vì http://localhost:8080.


3
Điều này có thể gây ra lỗi sau: Máy chủ từ xa trả về lỗi: (401) Không được phép?
DevDave

Localhost hoạt động như thế nào khi không có đường hầm đến nó? Nó không thực sự đánh máy cục bộ của bạn?
Jack Tuck vào

@JackTuck Lệnh gọi lại được gọi bởi trình duyệt của người dùng, không phải bởi máy chủ của Twitter.
fluffy

25

Tôi vừa phải làm điều này tuần trước. Rõ ràng là localhostkhông hoạt động nhưng 127.0.0.1có cờ vây.

Tất nhiên, điều này giả định rằng bạn đang đăng ký hai ứng dụng với Twitter, một ứng dụng cho trực tiếp của bạn www.mysite.comvà một ứng dụng khác 127.0.0.1.



8

Có, nó đã bị vô hiệu hóa do sự cố bảo mật gần đây được tìm thấy trong OAuth. Giải pháp duy nhất lúc này là tạo hai ứng dụng OAuth - một để sản xuất và một để phát triển. Trong ứng dụng phát triển, bạn đặt URL gọi lại localhost của mình thay vì URL trực tiếp.


Tôi chỉ cố gắng làm điều đó, nhưng nó không chấp nhận localhost: 3000 như một định dạng URL ...
David N. Welton

1
Có, họ dường như lọc các URL như vậy. :( Nhưng sự ủng hộ cho các url gọi lại tùy chỉnh đã trở lại - có thể họ đang được hỗ trợ ở đó.
arikfr

8

Đã chỉnh sửa URL gọi lại

http://localhost:8585/logintwitter.aspx

Chuyển đổi sang

http://127.0.0.1:8585/logintwitter.aspx

7

Đây là cách tôi đã làm điều đó:

URL gọi lại đã đăng ký: http://127.0.0.1/Callback.aspx

   OAuthTokenResponse authorizationTokens = 
        OAuthUtility.GetRequestToken(ConfigSettings.getConsumerKey(), 
                                     ConfigSettings.getConsumerSecret(), 
                                     "http://127.0.0.1:1066/Twitter/Callback.aspx");

Cấu hình:

public static class ConfigSettings
{
    public static String getConsumerKey()
    {
        return System.Configuration.ConfigurationManager.AppSettings["ConsumerKey"].ToString();
    }

    public static String getConsumerSecret()
    {
        return System.Configuration.ConfigurationManager.AppSettings["ConsumerSecret"].ToString();
    }

}

Web.config:

<appSettings>

    <add key="ConsumerKey" value="xxxxxxxxxxxxxxxxxxxx"/>
    <add key="ConsumerSecret" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>

</appSettings>

Đảm bảo bạn đặt thuộc tính 'sử dụng cổng động' của bạn dự án thành 'sai' và nhập số cổng tĩnh để thay thế. (Tôi đã sử dụng 1066).

Tôi hi vọng cái này giúp được!


7

Sử dụng http://smackaho.st

Những gì nó làm là một liên kết DNS đơn giản với 127.0.0.1 cho phép bạn bỏ qua các bộ lọc trên localhost hoặc 127.0.0.1:

smackaho.st. 28800 TRONG A 127.0.0.1

Vì vậy, nếu bạn nhấp vào liên kết, nó sẽ hiển thị cho bạn những gì bạn có trên máy chủ web cục bộ của bạn (và nếu bạn không có, bạn sẽ nhận được 404). Tất nhiên, bạn có thể đặt nó thành bất kỳ trang / cổng nào bạn muốn:

http://smackaho.st:54878/twitter/callback


6
smackaho.st không còn nữa tbaggery.com/2010/03/04/smack-a-ho-st.html . Sử dụng lvh.me thay thế. Nó đi thẳng đến localhost.
Justin

5

Tôi đang làm việc với url gọi lại Twitter trên máy chủ cục bộ của mình. Nếu bạn không chắc chắn về cách tạo một máy chủ ảo (điều này là quan trọng), hãy sử dụng Ampps. Anh ấy thực sự rất tuyệt và dễ tính. Trong một vài bước, bạn có máy chủ ảo của riêng mình và sau đó mọi url sẽ hoạt động trên đó. Ví dụ:

  1. tải xuống và cài đặt ampps

  2. Thêm miền mới. (ở đây bạn có thể đặt ví dụ twitter.local) có nghĩa là máy chủ ảo của bạn sẽ là http: //twitter.local và nó sẽ hoạt động sau bước 3.

  3. Tôi đang làm việc trên Win nên hãy truy cập vào tệp máy chủ của bạn -> C: \ Windows \ System32 \ Drivers \ etc \ hosts và thêm dòng: 127.0.0.1 twitter.local

Khởi động lại Bộ khuếch đại của bạn và bạn có thể sử dụng cuộc gọi lại của mình. Bạn có thể chỉ định bất kỳ url nào, ngay cả khi bạn đang sử dụng một số MVC khuôn khổ hoặc bạn có ghi đè url htaccess.

Hy vọng điều này giúp đỡ! Chúc mừng.


Cảm ơn vì tiền hỗ trợ. Trên Linux, chỉ cần thêm tên miền phát triển đến / etc / hosts
jeremyvillalobos

3

Khi tôi phát triển cục bộ, tôi luôn thiết lập tên nhà phát triển được lưu trữ cục bộ phản ánh dự án tôi đang làm. Tôi thiết lập điều này trong xampp thông qua xampp \ apache \ conf \ extra \ httpd-vhosts.conf và sau đó cũng trong \ Windows \ System32 \ drivers \ etc \ hosts.

Vì vậy, nếu tôi đang thiết lập một trang web dành cho nhà phát triển cục bộ cho example.com, tôi sẽ thiết lập nó dưới dạng example.dev trong hai tệp đó.

Câu trả lời ngắn gọn: Khi điều này được thiết lập đúng cách, bạn có thể đơn giản coi url này ( http://example.dev ) như thể nó đang tồn tại (thay vì cục bộ) khi bạn thiết lập Ứng dụng Twitter của mình.

Một câu trả lời tương tự đã được đưa ra ở đây: https://dev.twitter.com/discussions/5749

Trích dẫn trực tiếp (nhấn mạnh thêm):

Bạn có thể cung cấp bất kỳ URL hợp lệ nào có tên miền mà chúng tôi nhận ra trên trang chi tiết ứng dụng. OAuth 1.0a yêu cầu bạn gửi giá trị oauth_callback trên bước mã thông báo yêu cầu của quy trình và chúng tôi sẽ chấp nhận lệnh gọi lại động dựa trên locahost trên bước đó .

Điều này làm việc như một cái duyên đối với tôi. Hi vọng điêu nay co ich.


3

Nó có thể được thực hiện rất thuận tiện với Fiddler :

  • Mở menu Tools> HOSTS ...
  • Chèn một dòng như 127.0.0.1 your-production-domain.com, đảm bảo rằng "Bật ánh xạ lại các yêu cầu ..." được chọn. Đừng quên nhấn Save.
  • Nếu cần truy cập vào máy chủ sản xuất thực của bạn, chỉ cần thoát khỏi Fiddler hoặc tắt ánh xạ lại.
  • Khởi động lại Fiddler sẽ bật ánh xạ lại (nếu nó được chọn).

Một phần thưởng thú vị là bạn có thể chỉ định một cổng tùy chỉnh, như sau: 127.0.0.1:3000 your-production-domain.com(sẽ không thể đạt được điều này thông qua tệp máy chủ). Ngoài ra, thay vì IP, bạn có thể sử dụng bất kỳ tên miền nào (ví dụ localhost:).

Bằng cách này, bạn có thể (nhưng không cần thiết) đăng ký ứng dụng Twitter của mình một lần duy nhất (với điều kiện bạn không ngại sử dụng các khóa giống nhau để phát triển và sản xuất cục bộ).


2

chỉnh sửa hàm này trên TwitterAPIExchange.php tại dòng # 180

public function performRequest($return = true)
{
    if (!is_bool($return)) 
    { 
        throw new Exception('performRequest parameter must be true or false'); 
    }

    $header = array($this->buildAuthorizationHeader($this->oauth), 'Expect:');

    $getfield = $this->getGetfield();
    $postfields = $this->getPostfields();

    $options = array( 
        CURLOPT_HTTPHEADER => $header,
        CURLOPT_HEADER => false,
        CURLOPT_URL => $this->url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false
    );

    if (!is_null($postfields))
    {
        $options[CURLOPT_POSTFIELDS] = $postfields;
    }
    else
    {
        if ($getfield !== '')
        {
            $options[CURLOPT_URL] .= $getfield;
        }
    }

    $feed = curl_init();
    curl_setopt_array($feed, $options);
    $json = curl_exec($feed);
    curl_close($feed);

    if ($return) { return $json; }
}

Bạn có thể tải xuống TwitterAPIExchange.php từ đây github.com/J7mbo/twitter-api-php
Người trợ giúp

2

Tôi đã gặp phải thách thức tương tự và tôi không thể cung cấp cho localhost làm URL gọi lại hợp lệ. Vì vậy, tôi đã tạo một miền đơn giản để giúp chúng tôi các nhà phát triển: https://tolocalhost.com

Nó sẽ chuyển hướng bất kỳ đường dẫn nào đến miền localhost của bạn và cổng mà bạn cần. Hy vọng nó có thể được sử dụng cho các nhà phát triển khác.


Tài nguyên tuyệt vời, nhưng miền của bạn thêm "/" vào cuối url dẫn đến 404 trong một số trường hợp. bạn có thể vui lòng sửa nó? Ví dụ: nó chuyển hướng là "localhost / somename /? <response>, nhưng nó phải là" localhost / somename? <response>
Channa

@Channa Tôi đã cố gắng tạo lại điều này nhưng có vẻ như tập lệnh hoạt động chính xác. Bạn đang dùng trình duyệt nào? Tôi đã thử Chrome, Safari, Firefox và nó hoạt động như mong đợi.
Jørgen

Nó xảy ra với tôi trong cả Chrome và Firefox. Đây là tên máy chủ mà tôi đã đặt trong trang của bạn " localhost: 8080 / dashboard / twitterRedirect.jsp " Nhưng khi nó chuyển hướng nó chuyển đến " localhost: 8080 / dashboard / twitterRedirect.jsp /… " Vui lòng lưu ý ký hiệu "/" trước câu hỏi dấu. Nó sẽ khiến ứng dụng của tôi gửi cho tôi 404
Channa

1
@Channa, bạn không nên đặt toàn bộ URL vào trường tên máy chủ. Nó được gọi là: hostname, không phải URL ;-) Ý tưởng là có thể ghi đè 'localhost' thành một cái gì đó như: my.localhost.bla sau đó nó sẽ sử dụng nó thay vì localhost. Trong trường hợp của bạn, trường máy chủ lưu trữ cần phải là máy chủ cục bộ. Bạn đặt cổng thành 8080 và định cấu hình chuyển hướng để đi đến: tolocalhost.com/dashboard/twitterRedirect.jsp điều này sẽ chuyển hướng đến: localhost: 8080 / dashboard / twitterRedirect.jsp
Jørgen

2

Có vẻ như bây giờ http://127.0.0.1cũng ngừng hoạt động. Một giải pháp đơn giản là sử dụng http://localtest.methay vì http://localhostnó luôn trỏ tới 127.0.0.1Và bạn thậm chí có thể thêm bất kỳ tên miền phụ tùy ý nào vào đó và nó vẫn sẽ trỏ đến127.0.0.1

Xem trang web


1

đặt callbackurl trong ứng dụng twitter: 127.0.0.1:3000 và đặt WEBrick để ràng buộc trên 127.0.0.1 thay vì 0.0.0.0

lệnh: rails s -b 127.0.0.1


1

Có vẻ như Twitter hiện cho phép localhostbất kỳ thứ gì bạn có trong Callback URLcài đặt, miễn là có giá trị ở đó.


1

Tôi đã đấu tranh với điều này và làm theo hàng tá giải pháp, cuối cùng tất cả những gì tôi phải làm để làm việc với bất kỳ ssl apis nào trên máy chủ cục bộ là:

Tải xuống tệp: cacert.pem

Trong php.ini* bỏ nhận xét và thay đổi: curl.cainfo = "c:/wamp/bin/php/php5.5.12/cacert.pem"

  • Bạn có thể tìm thấy php.initệp của mình ở đâu trên máy bằng cách chạy php --initrong CLI của bạn
  • Tôi đã đặt cacert.pem của mình trong cùng thư mục với php.ini cho dễ.

1

Đây là các bước giúp tôi có được Facebook hoạt động với một ứng dụng cục bộ trên máy tính xách tay của tôi:

  • goto apps.twitter.com
  • nhập tên, mô tả ứng dụng và URL trang web của bạn Lưu ý: đối với localhost: 8000, hãy sử dụng 127.0.0.1:8000 vì trước đó sẽ không hoạt động
  • nhập URL gọi lại khớp với URL gọi lại của bạn được xác định trong TWITTER_REDIRECT_URI ứng dụng của bạn Lưu ý: ví dụ: http://127.0.0.1/login/twitter/callback (localhost sẽ không hoạt động).
  • Quan trọng, hãy nhập cả URL "chính sách bảo mật" và "điều khoản sử dụng" nếu bạn muốn yêu cầu địa chỉ email của người dùng
  • đánh dấu vào hộp kiểm đồng ý với các điều khoản
  • nhấp vào [Tạo ứng dụng Twitter của bạn]
  • chuyển sang tab [Chìa khóa và Mã thông báo truy cập] ở trên cùng
  • sao chép "Khóa người dùng (API Key)" và "Bí mật người tiêu dùng (API Secret)" sang TWITTER_KEY và TWITTER_SECRET trong ứng dụng của bạn
  • nhấp vào tab "Quyền" và đặt thích hợp thành "chỉ đọc", "đọc và viết" hoặc "đọc, viết và gửi trực tiếp tin nhắn" (sử dụng tùy chọn ít xâm nhập nhất cần thiết cho ứng dụng của bạn, chỉ dành cho đăng nhập OAuth "chỉ đọc" là đủ
  • Trong "Quyền bổ sung", hãy chọn hộp kiểm "yêu cầu địa chỉ email từ người dùng" nếu bạn muốn địa chỉ email của người dùng được trả lại cho dữ liệu đăng nhập OAuth (trong hầu hết các trường hợp, hãy chọn có)
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.