OpenIdConnect перенаправляет, как будто пользователь не вошел в систему - PullRequest
0 голосов
/ 30 октября 2018

Я работаю над проектом MVC для клиента (давайте назовем это «Проект A»), и мы должны использовать OpenIdConnect для авторизации, которая, по сути, заставила его работать, я буду перенаправлен на сайт входа, если я не авторизован и тд. Но если я хочу перейти к действию с [Authorize], он отправляет запрос в OpenIdConnect-Authority, чтобы проверить, вошел ли я в систему, а затем перенаправляет меня на RedirectUrl, который указан для этого клиента.
Поэтому, если я хочу перейти на /Home/Contact (в моем примере с [Authorize]), я не смогу туда попасть, потому что меня всегда перенаправят на мой "RedirectUrl".

Нужно ли мне самостоятельно сохранять Запрошенный URL, а затем перенаправлять себя? Неважно, установил я RedirectUrl или нет. Я думаю, что это немного странно, потому что в другом проекте B мы идем против нашего Identity Server 4, и там он работает без проблем.

Это код в моем Startup.Auth.cs:

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
});

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
    {
        ClientId = clientId,
        ClientSecret = clientSecret,
        Authority = authority,
        RedirectUri = redirectUri,
        ResponseType = "code",
        Scope = "openid profile email",
        Configuration = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration
        {
            AuthorizationEndpoint = authority + "as/authorization.oauth2"
        },
});

Я должен был установить AuthorizationEndpoint самостоятельно, потому что он всегда брал неправильный URL. Разница между Проектом A и Проектом B заключается в том, что для «ResponseType» установлено значение «code» в Проекте A. В Project B установлено значение «id_token». Но я должен установить его в «код», потому что другие типы ответов не принимаются.

В проекте B я также заметил, что «.AspNet.Cookies» доступен на моем сайте. Что не относится к проекту А. Нужно ли создавать его самостоятельно?

...