似乎我在问同样的问题,许多人都有,但不能把所有东西放在一起。 我有一个使用标准Identity DB配置了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}");
}
}
答案 0 :(得分:0)
首先,您需要了解如何在WebApi中完成身份验证。然后,如果您有调用此WebApi的工作示例,例如从Postman或Fiddler,您可以将手动请求与您从MVC应用程序以编程方式创建的请求进行比较。