c# - PostAsync to/Token 返回内部服务器错误

标签 c# asp.net asp.net-web-api2

我有一个 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/

相关文章:

c# - 在 Silverlight 中,UserControl_Loaded 和 Page_Loaded 有什么区别?

c# - 在 ListView 的下拉列表中获取 selectedIndexChanged 上的 ListView 项的值

javascript - 是否可以使用 http ://localhost as the source? 加载 javascript 文件

c# - 如何通过IHttpActionResult获取内容

c# - 没有详细的更新数据DataGrid

c# - xceed wpf 属性网格集合选择

c# - 显示来自 SQL 的数据时出错

c# - 从同步方法调用异步方法是 ASP .NET web api - 问题

c# - ASP.Net Web API Swashbuckle 如何忽略 HttpRequestMessage

c# - 这个 C# 操作方法代码实际上触发了 301 重定向吗?