2012-07-11 20 views
6

के साथ लॉगिन करें लिंकडेन के लिए लॉगिन विधि कैसे कार्यान्वित करेगी, ताकि लोग सिर्फ एक बटन पर क्लिक कर सकें और फेसबुक या ट्विटर पर लॉग इन करने के लिए अपने लिंकडिन खाते का उपयोग कर सकें? दोनों OAuth का उपयोग करते हैं, लेकिन मुझे उन लोगों के लिए निर्दिष्ट पुस्तकालय मिलते हैं जो उपयोग करने के लिए सरल हैं। Linkedin I के लिए मुझे केवल DotNetOpenAuth में कुछ नमूना कोड मिला लेकिन मैं किसी भी को समझ नहीं सकता।Linkedin

क्या कोई पुस्तकालय है जिसका उपयोग मैं लिंक्डइन के लिए लॉगिन फ़ंक्शन को सुविधाजनक बनाने के लिए कर सकता हूं? या DotNetOpenAuth 4 के साथ ASP.NET MVC में ऐसा करने के तरीके पर कोई ट्यूटोरियल?

+0

मैंने अभी तक ओएथ से गड़बड़ नहीं की है, वैसे भी इसके बारे में पढ़ने से ज्यादा नहीं। हालांकि, मैंने एक त्वरित Google किया और इस पृष्ठ को लिंकइन पर पाया: https://developer.linkedin.com/documents/quick-start-guide जहां तक ​​मैं यह कह सकता हूं + DotNetOpenAuth को नौकरी करना चाहिए। (मैं एक उत्तर लिख रहा हूं क्योंकि मुझे लगता है कि मुझे 100% यकीन नहीं है कि मैं यहां हूं, और मेरे पास इस विषय पर कोई वास्तविक दुनिया का अनुभव नहीं है :)) – Onkelborg

+0

@ ओन्केल्बॉर्ग, मैंने पाया कि , लेकिन डीएनओए थोड़े है ... ओथ के लिए जटिल और नमूने पुराने हैं। इससे भी बदतर, वे वेबफॉर्म कोड और कस्टम डेटा संरचनाओं से भरे हुए हैं, जो इसे समझना बहुत मुश्किल बनाता है। – CMircea

उत्तर

4

यहाँ एक बहुत ठोस नमूना

http://mrsarker.wordpress.com/2011/08/20/linkedin-rest-api-in-asp-net-mvc/

[HandleError] 
public class LinkedInController : Controller 
{ 
    public ActionResult index() 
    { 
     return AuthenticateToLinkedIn(); 
    } 

    static string token_secret = ""; 
    public ActionResult AuthenticateToLinkedIn() 
    { 
     var credentials = new OAuthCredentials 
     { 
      CallbackUrl = "http://localhost/home/callback", 
      ConsumerKey = ConfigurationManager.AppSettings["ConsumerKey"], 
      ConsumerSecret = ConfigurationManager.AppSettings["ConsumerSecret"], 
      Verifier = "123456", 
      Type = OAuthType.RequestToken 
     }; 

     var client = new RestClient { Authority = "https://api.linkedin.com/uas/oauth", Credentials = credentials }; 
     var request = new RestRequest { Path = "requestToken" }; 
     RestResponse response = client.Request(request); 

     token = response.Content.Split('&').Where(s => s.StartsWith("oauth_token=")).Single().Split('=')[1]; 
     token_secret = response.Content.Split('&').Where(s => s.StartsWith("oauth_token_secret=")).Single().Split('=')[1]; 
     Response.Redirect("https://api.linkedin.com/uas/oauth/authorize?oauth_token=" + token); 
     return null; 
    } 

    string token = ""; 
    string verifier = ""; 
    public ActionResult Callback() 
    { 
     token = Request["oauth_token"]; 
     verifier = Request["oauth_verifier"]; 
     var credentials = new OAuthCredentials 
     { 
      ConsumerKey = ConfigurationManager.AppSettings["ConsumerKey"], 
      ConsumerSecret = ConfigurationManager.AppSettings["ConsumerSecret"], 
      Token = token, 
      TokenSecret = token_secret, 
      Verifier = verifier, 
      Type = OAuthType.AccessToken, 
      ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader, 
      SignatureMethod = OAuthSignatureMethod.HmacSha1, 
      Version = "1.0" 
     }; 

     var client = new RestClient { Authority = "https://api.linkedin.com/uas/oauth", Credentials = credentials, Method = WebMethod.Post }; 
     var request = new RestRequest { Path = "accessToken" }; 
     RestResponse response = client.Request(request); 
     string content = response.Content; 


     string accessToken = response.Content.Split('&').Where(s => s.StartsWith("oauth_token=")).Single().Split('=')[1]; 
     string accessTokenSecret = response.Content.Split('&').Where(s => s.StartsWith("oauth_token_secret=")).Single().Split('=')[1]; 

     var company = new LinkedInService(accessToken, accessTokenSecret).GetCompany(162479);    

     // Some commented call to API 
     //company = new LinkedInService(accessToken, accessTokenSecret).GetCompanyByUniversalName("linkedin"); 
     // var companies = new LinkedInService(accessToken, accessTokenSecret).GetCompaniesByEmailDomain("apple.com");    
     // var companies1 = new LinkedInService(accessToken, accessTokenSecret).GetCompaniesByEmailDomain("linkedin.com");   
     // var companies2= new LinkedInService(accessToken, accessTokenSecret).GetCompaniesByIdAnduniversalName("162479", "linkedin"); 
     //var people = new LinkedInService(accessToken, accessTokenSecret).GetPersonById("f7cp5sKscd"); 
     //var people = new LinkedInService(accessToken, accessTokenSecret).GetCurrentUser(); 

     //string url = Url.Encode("http://bd.linkedin.com/pub/rakibul-islam/37/522/653"); 
     //var people = new LinkedInService(accessToken, accessTokenSecret).GetPeoPleByPublicProfileUrl(url); 
     //var peopleSearchresult = new LinkedInService(accessToken, accessTokenSecret).SearchPeopleByKeyWord("Princes"); 

     var peopleSearchresult = new LinkedInService(accessToken, accessTokenSecret).GetPeopleByFirstName("Mizan"); 
     String companyName = company.Name; 
     return Content(companyName);    
    } 
} 


public class LinkedInService 
{ 
    private const string URL_BASE = "http://api.linkedin.com/v1"; 
    public static string ConsumerKey { get { return ConfigurationManager.AppSettings["ConsumerKey"]; } } 
    public static string ConsumerKeySecret { get { return ConfigurationManager.AppSettings["ConsumerSecret"]; } } 
    public string AccessToken { get; set; } 
    public string AccessTokenSecret { get; set; } 

    public LinkedInService(string accessToken, string accessTokenSecret) 
    { 
     this.AccessToken = accessToken; 
     this.AccessTokenSecret = accessTokenSecret; 
    } 

    private OAuthCredentials AccessCredentials 
    { 
     get 
     { 
      return new OAuthCredentials 
      { 
       Type = OAuthType.AccessToken, 
       SignatureMethod = OAuthSignatureMethod.HmacSha1, 
       ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader, 
       ConsumerKey = ConsumerKey, 
       ConsumerSecret = ConsumerKeySecret, 
       Token = AccessToken, 
       TokenSecret = AccessTokenSecret 
      }; 
     } 
    } 

    #region Helper 

    private RestResponse GetResponse(string path) 
    { 
     var client = new RestClient() 
     { 
      Authority = URL_BASE, 
      Credentials = AccessCredentials, 
      Method = WebMethod.Get 
     }; 

     var request = new RestRequest { Path = path }; 

     return client.Request(request); 
    } 

    private T Deserialize(string xmlContent) 
    { 
     MemoryStream memoryStream = new MemoryStream(Encoding.ASCII.GetBytes(xmlContent)); 
     XmlSerializer deserializer = new XmlSerializer(typeof(T)); 
     return (T)deserializer.Deserialize(new StringReader(xmlContent)); 
    } 

    #endregion 

    // methods removed for brevity. check the original link for full source 

} 
+0

क्या कॉल के बाद वापस आने के लिए कस्टम डेटा स्टोर करने का कोई तरीका है? उदाहरण के लिए, मैं लॉग इन प्रक्रिया समाप्त होने के बाद उपयोगकर्ता को रीडायरेक्ट करने के लिए मूल पृष्ठ के यूआरएल को स्टोर करना चाहता हूं। – CMircea

+0

@MirceaChirea आपके पास यह लाइन है CallbackUrl = "http: // localhost/home/callback", मुझे लगता है कि आपको बस उस पंक्ति को बदलना होगा और कुछ पैरामीटर जोड़ना होगा – Onkelborg

+0

@ ओन्केल्बॉर्ग, * फेसपाल्म *, मैंने कभी सोचा नहीं, हाहा! – CMircea

0

आप इसे अपने आप को कोड करने के लिए नहीं करना चाहते हैं, तो आप हमेशा Janrain के RPX समाधान की तरह एक तीसरे पक्ष के समाधान पर गौर कर सकते श्रेष्ठ दिखाई देता है : http://developers.janrain.com/। यह आपको लिंक्डइन साइन-इन प्लस कई और देगा।

+0

पर एक नज़र डालें, मैंने अपनी वेबसाइट की लॉगिन प्रक्रिया के साथ-साथ पुनरावर्ती शुल्क में विफलता का एक बिंदु जोड़ने के खिलाफ निर्णय लिया। – CMircea