在 URL 中获取代币

Grab token in URL

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

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

在我的项目中,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 中的所有局部变量和自动变量,但没有显示任何类型的授权代码。

所以我想知道,在程序执行重定向之前,是否有什么地方可以让我在程序中获取该代码?

谢谢!

你应该添加

.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");