未找到 Coinbase OAuth 失败
Coinbase OAuth Failure Not Found
我正在尝试在我的 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;
//...
在我点击授权按钮后,我被重定向到我的回调 url:localhost/signin-coinbase 我收到一个错误:
Exception: OAuth token endpoint failure: Status: NotFound;Headers: Cache-Control: no-store, must-revalidate, no-cache, private
在错误的正文部分,有一条消息:
Body: Invalid request. Instead of a GET request, you should be making a POST with valid POST params. For more information, see https://developers.coinbase.com/docs/wallet/coinbase-connect;
编辑
此错误发生在 Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler
我推测原因是身份验证处理程序正在向 /oauth/token
api 发出获取请求,但它应该发出 post,有什么想法吗?
我应该尝试使用 Oidc 吗?
我为此创建了一个 nuget 包,这样其他人就可以避免我遇到的问题:
Install-Package Coinbase.Authentication
原来他们的 documentation 是错误的。在顶部,它声明他们的令牌端点是:
他们声称他们的令牌访问 url 是:
访问令牌URL:http://www.coinbase.com/oauth/token
这对我来说似乎有点奇怪,因为他们的令牌端点没有使用 ssl。在搜索互联网时,我发现了一个使用正确 url:
的应用程序
基本上为了解决这个问题,我将选项更改为如下所示:
.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";
//...
我正在尝试在我的 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;
//...
在我点击授权按钮后,我被重定向到我的回调 url:localhost/signin-coinbase 我收到一个错误:
Exception: OAuth token endpoint failure: Status: NotFound;Headers: Cache-Control: no-store, must-revalidate, no-cache, private
在错误的正文部分,有一条消息:
Body: Invalid request. Instead of a GET request, you should be making a POST with valid POST params. For more information, see https://developers.coinbase.com/docs/wallet/coinbase-connect;
编辑
此错误发生在 Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler
我推测原因是身份验证处理程序正在向 /oauth/token
api 发出获取请求,但它应该发出 post,有什么想法吗?
我应该尝试使用 Oidc 吗?
我为此创建了一个 nuget 包,这样其他人就可以避免我遇到的问题:
Install-Package Coinbase.Authentication
原来他们的 documentation 是错误的。在顶部,它声明他们的令牌端点是:
他们声称他们的令牌访问 url 是:
访问令牌URL:http://www.coinbase.com/oauth/token
这对我来说似乎有点奇怪,因为他们的令牌端点没有使用 ssl。在搜索互联网时,我发现了一个使用正确 url:
的应用程序基本上为了解决这个问题,我将选项更改为如下所示:
.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";
//...