Доступ к User.Identity и претензии извне - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь создать службу 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, поэтому не уверен, что мне не хватает или даже если моя архитектура верна.

1 Ответ

0 голосов
/ 20 января 2019

Поэтому, обычно, когда вы входите в свой браузер, ASP.NET Core администрирует cookie со всей необходимой информацией о вашем ClaimsPrincipal, чтобы сервер мог идентифицировать вас при последующих запросах к веб-сайту.Может случиться так, что ваш сервер не отправляет запросы с cookie, который был администрирован после аутентификации, поэтому ваши запросы не могут быть аутентифицированы.

...