我有一个Web Api,它具有到Startup.Auth中的登录令牌设置的路由,如下所示:
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
AllowInsecureHttp = false
};
那应该将我的api登录请求路由到此处:
[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
[AllowAnonymous]
[Route("ExternalLogin", Name = "ExternalLogin")]
public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
{
Authorize stuff...
}
从我的客户端,我试图登录并获取访问令牌:
var loginResponse = await client.PostAsync("/Token", loginContent);
使用登录内容:
var values = new Dictionary<string, string>();
values.Add("grant_type", "password");
values.Add("username", "usernamehere");
values.Add("password", "passwordhere");
var loginContent = new FormUrlEncodedContent(values);
当我尝试进入到/ Token的PostAsync以获取access_token时,总是收到内部服务器错误。我什至无法进入api看看正在发生什么。
如果从api方法中删除[Authorize]装饰,我可以取回数据...我只是无法登录。
如果我转到浏览器并将以下内容放在url中进行测试...
https://localhost:44305/Token
我收到(400)错误的要求。不知道下一步该怎么做。
我必须要运行令牌验证...如果没有安全性就无法发布。 ;)
更新:
我应该补充一点,我正在使用自定义UserStore进行身份验证。
更新2:客户端
public static HttpClient GetClient()
{
HttpClient Client = new HttpClient();
Client.BaseAddress = new Uri(Ics2Constants.ICS2APIBaseAddress);
Client.DefaultRequestHeaders.Accept.Clear();
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return Client;
}
然后使用:
using (var client = ICS2HttpClient.GetClient())
{
//TESTING:
await ICS2HttpClient.Authenticate(client);
//... more stuff after authentication
}
Authenticate包含PostAsync ...
最佳答案
Authorize属性不应放在获取令牌的任何方法之上,它应该是匿名的
关于c# - PostAsync到/Token返回内部服务器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30629912/