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

10-11 20:36