.Net Core OAuth在授权代码重定向上返回302

时间:2019-05-04 15:07:25

标签: c# asp.net-core oauth .net-core stripe-payments

我正在尝试使用.Net-Core 2.1为StripeConnect实施OAuth。我已经将启动配置为:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(cfg =>
{
    cfg.RequireHttpsMetadata = false;
    cfg.SaveToken = true;
    cfg.TokenValidationParameters = tokenValidationParameters;
})
.AddGoogle(options =>
{
    options.SaveTokens = true;
    options.ClientId = Configuration["Google:ClientId"];
    options.ClientSecret = Configuration["Google:ClientSecret"];
})
.AddOAuth(StripeConnectDefaults.AuthenticationScheme, options => {
    options.SaveTokens = true;
    options.ClientId = Configuration["Stripe:ClientId"];
    options.ClientSecret = Configuration["Stripe:ClientSecret"];
    options.TokenEndpoint = StripeConnectDefaults.TokenEndpoint;
    options.AuthorizationEndpoint = StripeConnectDefaults.AuthorizationEndpoint;
    options.CallbackPath = new PathString("/signin-stripeconnect");
    options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "stripe_user_id");
});

我可以获取OAuthTokenResponse,但是与令牌完全一样 当它碰到ExternalLoginCallback时,没有提供令牌

[HttpPost("ExternalLogin")]
[AllowAnonymous]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
    var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
    var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
    return Challenge(properties, provider);
}

[HttpGet("ExternalLoginCallback")]
[AllowAnonymous]
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)
{
    if (remoteError != null)
    {
        throw new Exception($"Error from external provider: {remoteError}");
    }
    var info = await _signInManager.GetExternalLoginInfoAsync();
    if (info == null)
    {
        //It throws here, since there are no tokens 
        throw new Exception("Error: could not find user tokens");
    }

    //Handle the rest of authentication
}

更新

我创建了一个虚拟处理程序调查,看来我正在获得OAuthTokenResponse Fine,但是由于某种原因,签名管理器找不到令牌:

public class DummyOAuthHandler<T> : OAuthHandler<T>
    where T: OAuthOptions, new()
{
    public DummyOAuthHandler(IOptionsMonitor<T> options, 
        ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
    {
    }

    protected override async Task<OAuthTokenResponse> ExchangeCodeAsync(string code, string redirectUri)
    {
        var result = await base.ExchangeCodeAsync(code, redirectUri);
        return result;
    }
}

如何获取.Net-core以正确获得带有授权码的令牌?

0 个答案:

没有答案