【问题标题】:.Net-Core Log out of Oauth.Net-Core 退出 Oauth
【发布时间】:2018-10-30 07:42:51
【问题描述】:

我创建了一个使用 OAuth 登录 Coinbase 的应用程序。我的启动配置如下:

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?meta[send_limit_amount]=1";
    options.TokenEndpoint = "https://api.coinbase.com/oauth/token";
    options.UserInformationEndpoint = "https://api.coinbase.com/v2/user";

    COINBASE_SCOPES.ForEach(scope => options.Scope.Add(scope));

    options.SaveTokens = true;

    options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
    options.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
    options.ClaimActions.MapJsonKey("urn:coinbase:avatar", "avatar_url");

    options.Events = new OAuthEvents
    {
        OnCreatingTicket = async context =>
        {
            var request = new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint);
            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);
            request.Headers.Add("CB-VERSION", DateTime.Now.ToShortDateString());
            var response = await context.Backchannel.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, context.HttpContext.RequestAborted);
            response.EnsureSuccessStatusCode();

            var user = JObject.Parse(await response.Content.ReadAsStringAsync());

            context.RunClaimActions(user);
        }
    };
});

当用户登录时,我会返回一个质询结果并让默认身份验证工作。

[HttpGet]
public IActionResult Login(string returnUrl = "/")
{
    return Challenge(new AuthenticationProperties() { RedirectUri = returnUrl });
}

我试图弄清楚如何注销,但是当我在基本控制器上调用 Signout 时没有任何反应。

[HttpGet]
public IActionResult Logout()
{
    this.SignOut();
    return Redirect(Url.Content("~/"));
}

如何退出 oauth?

【问题讨论】:

    标签: c# oauth .net-core


    【解决方案1】:

    目前可能有一种更优雅的方式来执行此操作。我发现我可以在 HTTPContext 上调用SignOut 方法

    public async Task<IActionResult> Logout()
    {
        await HttpContext.SignOutAsync();
        return Redirect(Url.Content("~/"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 2019-03-23
      • 2021-05-15
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多