[英]mvc and web.api authorisation using oauth
似乎我在問一個同樣的問題,許多人有但不能將所有東西放在一起。 我有一個使用標准身份數據庫配置了Oauth的標准MVC應用程序,該用戶登錄並且一切正常,然后我希望將Web.API應用程序稱為經過身份驗證的用戶。 從我的研究中,我已經將不記名令牌添加到httpclient,以為這將在web.api應用程序中得到授權,因此我已將Web.API應用程序設置為指向相同的身份數據庫,但不確定自己缺少什么。 我花了幾天時間,沒有運氣,所以任何樣品將不勝感激。
獲取承載令牌的代碼是
protected string GetToken()
{
var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, User.Identity.Name));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, User.Identity.GetClaimValue(ClaimTypes.NameIdentifier.ToString())));
AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = new SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
string accessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
return accessToken;
}
Web.APi的調用是
var token = GetToken();
string uri = UriEASOnlineApi + EASOnlineWebAPI.SignErectors;
List<SignErector> result;
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
var task = await client.GetAsync(uri);
if (task.IsSuccessStatusCode)
{
var jsonString = await task.Content.ReadAsStringAsync();
result = JsonConvert.DeserializeObject<List<SignErector>>(jsonString);
}
else
{
throw new Exception($"failed: {task.StatusCode}");
}
}
首先,您需要了解如何在WebApi中完成身份驗證。 然后,如果您有調用此WebApi的有效示例(例如,來自Postman或Fiddler),則可以將手動請求與通過MVC應用程序以編程方式創建的請求進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.