我有一个 web Api,它有一个到 Startup.Auth 中的登录 token 设置的路由,如下所示:
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...
}
我正在尝试从我的客户端登录并获取访问 token :
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);
当我尝试进入 PostAsync to/Token 以取回 access_token 时,我总是会收到内部服务器错误。我什至无法进入 api 以查看发生了什么。
如果我从 api 方法中删除 [Authorize] 装饰,我可以取回我的数据......我只是无法登录。
如果我转到浏览器并将以下内容放入 url 中进行测试...
https://localhost:44305/Token
我收到 (400) 错误请求。不确定接下来要尝试什么。
我必须让 Token Auth 正常工作……没有安全性就无法发布。 ;)
更新:
我应该补充一点,我正在使用自定义 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 属性不应放在任何获取 token 的方法之上它应该是匿名的
关于c# - PostAsync to/Token 返回内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30629912/