在 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");
我使用 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");