首页 > 解决方案 > 在 ASP.NET Core 的外部 OAuth 身份验证提供程序中使用 Bearer 令牌

问题描述

这是Startup.cs来自SignInWithAppleSample

public void ConfigureServices(IServiceCollection services)
{
    // ...

    services
        .AddAuthentication(options => options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.LoginPath = "/signin";
            options.LogoutPath = "/signout";
        })
        .AddApple(options =>
        {
            options.ClientId = Configuration["AppleClientId"];
            options.KeyId = Configuration["AppleKeyId"];
            options.TeamId = Configuration["AppleTeamId"];

            options.UsePrivateKey(
                (keyId) =>
                    Environment.ContentRootFileProvider.GetFileInfo($"AuthKey_{keyId}.p8"));
        });

    // ...
}

public void Configure(IApplicationBuilder app)
{
    // ...

    app.UseAuthentication();

    // ...
}

这是控制器的方法,用于身份验证:

public class AuthenticationController : Controller
{
    [HttpPost("~/signin")]
    public IActionResult SignIn()
        => Challenge(new AuthenticationProperties { RedirectUri = "/redirect/signin/apple" }, AppleAuthenticationDefaults.AuthenticationScheme);

    [HttpGet("~/signout")]
    [HttpPost("~/signout")]
    public IActionResult SignOut()
        => SignOut(new AuthenticationProperties { RedirectUri = "/redirect/signout/apple" }, CookieAuthenticationDefaults.AuthenticationScheme);
}

它有效,cookie 设置,我可以看到我的声明。

在我的项目中,我不使用内置的 ASP.NET Core,我只需要处理请求/redirect/signin/apple并将访问令牌、身份令牌等返回给我的客户,并可能在数据库中检查该用户已经注册。客户不想要 cookie,他们只接受不记名令牌。

所以,问题是,我怎样才能得到 Bearer 令牌而不是 cookie?

标签: c#asp.net-corecookiesoauthbearer-token

解决方案


推荐阅读