Asp.net mvc 使用oauth的mvc和web.api授权
似乎我问的问题和许多人的问题一样,但不能把所有的东西都放在一起。 我有一个使用Oauth配置的标准MVC应用程序,该应用程序使用标准Identity DB,用户登录后一切正常,然后我想以经过身份验证的用户身份调用Web.API应用程序。根据我的研究,我已将承载令牌添加到httpclient,认为这将以某种方式在web.api应用程序中得到授权。我已将web.api应用程序设置为指向相同的标识数据库,但我不确定我缺少了什么。我花了好几天的时间在这上面,运气不好,所以任何样品都将不胜感激 获取承载令牌的代码是Asp.net mvc 使用oauth的mvc和web.api授权,asp.net-mvc,api,oauth,asp.net-mvc-5,Asp.net Mvc,Api,Oauth,Asp.net Mvc 5,似乎我问的问题和许多人的问题一样,但不能把所有的东西都放在一起。 我有一个使用Oauth配置的标准MVC应用程序,该应用程序使用标准Identity DB,用户登录后一切正常,然后我想以经过身份验证的用户身份调用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}");
}
}
var-token=GetToken();
字符串uri=UriEASOnlineApi+EASOnlineWebAPI.SignErectors;
列出结果;
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Add(“授权”、“承载人”+令牌);
var task=await client.GetAsync(uri);
if(任务。IsSuccessStatusCode)
{
var jsonString=await task.Content.ReadAsStringAsync();
结果=JsonConvert.DeserializeObject(jsonString);
}
其他的
{
抛出新异常($“失败:{task.StatusCode}”);
}
}
首先,您需要知道如何在WebApi中进行身份验证。然后,如果您有调用此WebApi的工作示例(例如来自Postman或Fiddler),您可以将手动请求与从MVC应用程序以编程方式创建的请求进行比较