【发布时间】:2022-02-12 16:45:37
【问题描述】:
我正在实施 IdentityServer。我需要使用 RequestAuthorizationCodeTokenAsync 来获取可以传递给 UserInfo 端点的令牌。所以我有这样的代码:
var client = new HttpClient();
var tokenResponse = await client.RequestAuthorizationCodeTokenAsync(new AuthorizationCodeTokenRequest
{
Address = _discoveryDocument.TokenEndpoint,
ClientId = ConfigurationManager.AppSettings["ClientId"],
ClientSecret = ConfigurationManager.AppSettings["ClientSecret"],
Code = "code",
});
我的客户已成功通过身份验证并被重定向。那么如何从这个重定向中获取AuthorizationCode,以便我可以将代码作为代码传递给RequestAuthorizationCodeTokenAsync。我已经像这样设置了我的 startup.cs:
services.AddAuthentication(options =>
{
options.DefaultScheme = "cookie";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("cookie")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = ConfigurationManager.AppSettings["AuthorityUrl"];
options.ClientId = ConfigurationManager.AppSettings["ClientId"];
options.ClientSecret = ConfigurationManager.AppSettings["ClientSecret"];
options.RequireHttpsMetadata = false;
options.GetClaimsFromUserInfoEndpoint = true;
options.ResponseType = "code";
options.UsePkce = true;
options.ResponseMode = "query";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("ois");
options.SaveTokens = true;
});
我知道授权请求应该返回一个授权码(我猜是在一个回调 URL 中),但我不知道如何获取它。
我尝试过使用:
Microsoft.Extensions.Primitives.StringValues code;
Microsoft.Extensions.Primitives.StringValues state;
this.Request.Query.TryGetValue("code", out code);
this.Request.Query.TryGetValue("state", out state);
但代码为空。
请帮忙。
谢谢
【问题讨论】:
标签: c# asp.net-core httpclient identityserver4 openid