2017-04-26 177 views
0

我需要在我的Angular前端和ASP.NET Web Api後端之間建立一個驗證。使用ASP.NET Web Api的角度驗證

的要求是:

  • 我需要兩個不同的登錄頁面(1採用了經典的登錄畫面和1一個採用了經典的登錄畫面+ LinkedIn)

我無法找到任何最新的文檔,我應該如何做到這一點... 我期待https://auth0.com/,但他們正在使用一個不再支持我的web api版本的軟件包。

我的研究也瞭解到我可能應該使用Jwt,但我在我的web api中難以建立這個。

有人可以給我適當的文件嗎?我知道有一個內置認證,但我不知道這個認證有多好,以及您應該如何將它們用於JWT。我在網上找到的所有東西都是過時的......。

非常感謝您的幫助。

回答

0

這是你需要以用戶與LinkedIn認證做流量:
角部位:
1.redirect與請求的查詢參數的用戶,例如:

    var req = { 
        response_type: "code", 
        client_id: "Your Client ID", 
        redirect_uri: location.origin + location.pathname, 
        state: "DCESFWf45A53sdfKef434" 
       }; 
       window.location.href = linkedinAuthorizationUrl + ObjecttoParams(req); 

2.用戶通過驗證後,linkedin會將用戶重定向回您的redirect_url,並附加查詢參數名爲代碼,您的角度控制器應收集並將其發送到您的webapi方法爲下一步。
的WebAPI部分:
3.一旦您發佈的LinkedIn代碼添加到您的WebAPI你需要交換LinkedIn的API(HTTP POST)的道理,例如:

using (WebClient wc = new WebClient()){ 
string RedirectUrl = providerLogin.RedirectUrl; 
//Exchange tokens with linkedin      
byte[] resultAsBytes = 
wc.UploadValues("https://www.linkedin.com/oauth/v2/accessToken", new 
NameValueCollection() 
       { 
       { "grant_type", "authorization_code" }, 
       { "code", "THE CODE YOU RECEIVED FROM THE CLIENT" }, 
       {"redirect_uri",RedirectUrl }, 
       {"client_id", "YOUR LINKEDIN KEY"}, 
       {"client_secret", "YOUR LINKEDIN PASSWORD"} 
         }); 

string resultAsString = 
System.Text.Encoding.UTF8.GetString(resultAsBytes); 
         var resultAsJson = JObject.Parse(resultAsString); 
         string accessToken = 
resultAsJson["access_token"].ToString(); 
} 

4.Last部分 - 當你您需要訪問令牌來執行對linkedin的API的GET請求以獲取用戶的詳細信息:

using (WebClient wc = new WebClient()){ 
wc.Headers.Add("Authorization", "Bearer " + accessToken); 
var json = wc.DownloadString("https://api.linkedin.com/v1/people/~: 
(email-address,id,first-name,last-name,picture-url,public-profile-url)? 
format=json"); 
resultAsJson = JObject.Parse(json); 
} 

就是這樣!我希望一切都很清晰,並且你明白我的代碼。祝你好運!