2017-04-26 172 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); 
} 

就是这样!我希望一切都很清晰,并且你明白我的代码。祝你好运!