找不到Coinbase OAuth失败

时间:2018-10-26 00:54:15

标签: c# oauth-2.0 .net-core coinbase-api

我正在尝试在我的应用程序中为Coinbase设置OAuth。授权回调重定向后,我遇到了问题。

我有一个.Net-Core应用程序设置,如下所示:

public const string COINBASE_AUTH_ID = "coinbase";

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddAuthentication(options =>
    {
       options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
       options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
       options.DefaultChallengeScheme = COINBASE_AUTH_ID;
    })
    .AddCookie()
    .AddOAuth(COINBASE_AUTH_ID, options =>
    {
        options.ClientId = Configuration["Coinbase:ClientId"];
        options.ClientSecret = Configuration["Coinbase:ClientSecret"];
        options.CallbackPath = new PathString("/signin-coinbase");

        options.AuthorizationEndpoint = "https://www.coinbase.com/oauth/authorize";
        options.TokenEndpoint = "http://www.coinbase.com/oauth/token";

        options.SaveTokens = true;
 //...

单击“授权”按钮后,我被重定向到我的回叫网址:localhost / signin-coinbase,我得到一个错误:

  

异常:OAuth令牌端点失败:状态:未找到;标头:缓存控制:无存储,必须重新验证,无缓存,私有

在错误的正文部分,有一条消息:

  

正文:请求无效。代替GET请求,您应该使用有效的POST参数进行POST。有关更多信息,请参见https://developers.coinbase.com/docs/wallet/coinbase-connect;

编辑 此错误发生在Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler

我推测原因是身份验证处理程序正在向/oauth/token api发出Get请求,但它应该在发布任何想法?

我应该尝试使用Oidc吗?

1 个答案:

答案 0 :(得分:0)

我为此创建了一个nuget包,以便其他人可以避免遇到的问题:

Install-Package Coinbase.Authentication

证明他们的documentation是错误的。顶部显示其令牌端点为:

他们声称自己的令牌访问网址为:

访问令牌URL:http://www.coinbase.com/oauth/token

在我看来,这有点奇怪,因为他们的令牌端点未使用ssl。在搜寻互联网时,我发现了一个使用正确网址的应用程序:

基本上要解决此问题,我将选项更改为:

.AddOAuth(COINBASE_AUTH_ID, options =>
{
    options.ClientId = Configuration["Coinbase:ClientId"];
    options.ClientSecret = Configuration["Coinbase:ClientSecret"];
    options.CallbackPath = new PathString("/signin-coinbase");

    options.AuthorizationEndpoint = "https://www.coinbase.com/oauth/authorize";
    options.TokenEndpoint = "https://api.coinbase.com/oauth/token";


 //...