Я пытаюсь создать службу SSO (ядро .net) с OpenID Connect, которая станет слоем между приложением Webforms и поставщиком услуг.Я создал несколько конечных точек, чтобы проверить, прошел ли пользователь проверку подлинности, и получить утверждения пользователей от службы.Я могу получить правильные результаты, когда я вызываю эти конечные точки из моего браузера.Однако, когда я звоню им с сайта (с HttpWebRequest).User.Identity
всегда пусто.Моя конечная точка для проверки подлинности пользователя выглядит следующим образом:
[HttpGet]
[Route("IsAuthenticated")]
public IActionResult IsAuthenticated()
{
return Json(User.Identity.IsAuthenticated);
}
Или для получения токена доступа:
[HttpGet]
[Route("access_token")]
public async Task<IActionResult> AccessToken()
{
var tokenResult = await HttpContext.GetTokenAsync("access_token");
return Json(tokenResult);
}
Мой запуск ConfigureServices выглядит следующим образом:
var OIDCConfiguration = new OIDCSettings()
{
Authority = Configuration["OIDCSettings:Authority"],
ClientId = Configuration["OIDCSettings:ClientId"],
ClientSecret = Configuration["OIDCSettings:ClientSecret"],
CallbackPath = Configuration["OIDCSettings:CallbackPath"],
UserInfoEndpoint = Configuration["OIDCSettings:UserInfoEndpoint"]
};
services.AddAuthentication(options => {
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "oidc";
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddOpenIdConnect("oidc", options => {
options.Authority = OIDCConfiguration.Authority;
options.ClientId = OIDCConfiguration.ClientId;
options.ClientSecret = OIDCConfiguration.ClientSecret;
options.CallbackPath = new PathString(OIDCConfiguration.CallbackPath);
options.ResponseType = OpenIdConnectResponseType.Code;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("openid emailAddress");
options.AuthenticationMethod = OpenIdConnectRedirectBehavior.RedirectGet;
options.SaveTokens = true;
});
И для запуска промежуточного программного обеспечения я использую объект ChallengeResult.
Я новичок в архитектуре OpenID Connect и Middleware, поэтому не уверен, что мне не хватает или даже если моя архитектура верна.