【问题标题】:Grab token in URL抓取 URL 中的令牌
【发布时间】:2021-01-17 15:25:36
【问题描述】:

我使用 Dotnetcore 3.1 创建了一个 Web 应用程序。使用 OAuth 2 方法通过 API 进行身份验证。

我需要找到一种方法来获取 API 返回的 URL 中的代码。

在我的项目中,Startup.cs 如下所示:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = "MyAuthSchema";
            })
               .AddCookie()
               .AddOAuth("MyAuthSchema", options =>
               {
                   options.ClientId = Configuration["artAPI:ClientId"];
                   options.ClientSecret = Configuration["artAPI:ClientSecret"];
                   options.CallbackPath = new PathString("/test");
                   options.AuthorizationEndpoint = "https://artForce.ch/oauth/authorize?response_type=code&client_id=y_gkjtj448HGHG483&redirect_uri=https://display.zh.edu/authorize";
                   options.TokenEndpoint = "MyTokenEndPoint";
                   options.UserInformationEndpoint = "MyUserInformationEndPoint";
               });
        }

第 3 方 API 希望端点的格式如下所示:

options.AuthorizationEndpoint = "https://artForce.ch/oauth/authorize?response_type=code&client_id=y_gkjtj448HGHG483&redirect_uri=https://display.zh.edu/authorize";

https://artForce.ch/oauth/authorize 是第 3 方 API 端点

https://display.zh.edu/authorize 是我的应用程序。

我可以使用它,但我希望能够在我的代码中获取授权令牌,然后再将我重定向到 https://display.zh.edu/authorize

所以当我尝试授权时,我按下一个按钮来触发这个控制器:

[Route("[controller]/[action]")]
public class AuthController : Controller
{
    [HttpGet]
    public IActionResult Login(string returnUrl = "/")

    {
        return Challenge(new AuthenticationProperties() { RedirectUri = returnUrl });
    }
}

但是当它到达return Challenge 行时,它会重定向我,我无法弄清楚我事先要捕获授权码。

重定向到这里:

https://display.zh.edu/authorize?code=JsAt9KwROG_19484846333GFHsuuwuh

这就是我想要在 重定向之前得到的:

code=JsAt9KwROG_19484846333GFHsuuwuh

我什至在其中设置了一个断点并检查了 Visual Studio 中的所有本地变量和自动变量,但没有显示任何类型的授权代码。

所以我想知道,是否有什么地方可以在我的程序中获取该代码,然后再进行重定向?

谢谢!

【问题讨论】:

    标签: c# asp.net-core oauth-2.0 asp.net-core-3.1 c#-8.0


    【解决方案1】:

    你应该添加

    .AddOAuth("MyAuthSchema", options =>
        {
            // save your tokens for future use
            config.SaveTokens = true;
    
            // get token inside oauth events
            config.Events.OnCreatingTicket = context =>
            {
                var token = context.AccessToken;
                return Task.CompletedTask;
            };
        });
    

    或者当您设置为真正的 SaveToken 配置时,您应该能够在代码中的任何地方获取令牌:

    var token = await HttpContext.GetTokenAsync("access_token");
    

    【讨论】:

    • 谢谢!但我在OnCreatingTicket = context => 部分收到错误...Not all code paths return a value in lambda expression of type 'Func<OAuthCreatingTicketContext, Task>'
    • 只设置return Task.CompletedTask;
    猜你喜欢
    • 2012-01-09
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2015-07-20
    • 2021-06-19
    相关资源
    最近更新 更多