Вход Azure AD в бесконечный цикл - PullRequest
0 голосов
/ 03 января 2019

Мой код входит в бесконечный цикл, попадает на страницу входа Azure (размещается в Microsoft), затем перенаправляется обратно в мое приложение, затем обратно на страницу входа MS host и т. Д. И т. Д. И т. П.

В моем коде естьточка останова в событии OnAuthorizationCodeReceived ...

    public void ConfigureAzureAd(IServiceCollection services)
    {
        //set authentication to use Azure AD
        services.AddAuthentication(auth =>
        {                
            auth.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            auth.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            auth.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddOpenIdConnect(opts =>
        {

            Configuration.GetSection("OpenIdConnect").Bind(opts);

            opts.Events = new OpenIdConnectEvents
            {
                OnAuthorizationCodeReceived = async ctx =>
                {
                    HttpRequest request = ctx.HttpContext.Request;
                    //We need to also specify the redirect URL used
                    string currentUri = UriHelper.BuildAbsolute(request.Scheme, request.Host, request.PathBase, request.Path);
                    //Credentials for app itself
                    var credential = new ClientCredential(ctx.Options.ClientId, ctx.Options.ClientSecret);

                    //Construct token cache
                    ITokenCacheFactory cacheFactory = ctx.HttpContext.RequestServices.GetRequiredService<ITokenCacheFactory>();
                    TokenCache cache = cacheFactory.CreateForUser(ctx.Principal);

                    var authContext = new AuthenticationContext(ctx.Options.Authority, cache);

                    //Get token for Microsoft Graph API using the authorization code
                    string resource = "https://graph.microsoft.com";
                    AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(
                        ctx.ProtocolMessage.Code, new Uri(currentUri), credential, resource);

                    //Tell the OIDC middleware we got the tokens, it doesn't need to do anything
                    ctx.HandleCodeRedemption(result.AccessToken, result.IdToken);
                    //ctx.HandleCodeRedemption();
                }
            };
        });
    }

, и я могу проверить данные в result, и все это выглядит нормально (хотя и не уверен, как будет выглядеть сбой), похоже,вход в систему работает, но мое приложение не может распознать, что вход в систему произошел или не сохраняется, и продолжает повторять попытку

Я также попросил кого-то еще попробовать войти в систему с пользователем, которого нет в моем Active Directory,и, соответственно, происходит сбой, действительно похоже, что Active Directory счастлива, но мое приложение просто перенаправляет.

Я использую .Net Core 2.2 (мой первый основной проект)

Яс помощью Active Directory Free

Обновление в ответ на @Marilee Turscak - MSFT

Если у меня нет правильной настройки URL-адреса ответа в portal.azure.com и передается вэто через C #, то лазурь бросает еrror, так что у меня определенно есть ответный URL, и он соответствует

Конфиг выглядит так:

"OpenIdConnect": {
    "ClientId": "<guid in here>", // Application ID
    "ClientSecret": "<secrect from portal.azure.com>",
    "Authority":     "https://login.microsoftonline.com/emailwithout@symbol.onmicrosoft.com/",
    "PostLogoutRedirectUri": "http://www.<projectname_in_here>.local",
    "CallbackPath": "/signin-oidc",
    "ResponseType": "code id_token"
}

Ответы [ 2 ]

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

Отвечая на мой собственный вопрос ...

Я думаю, что моя проблема была как-то связана с папками функций.Я включал настраиваемую маршрутизацию для включения папок компонентов, но код Azure AD устанавливает собственный настраиваемый маршрут для «/ signin-oidc».Я пришел к такому выводу, используя Visual Studio для создания нового проекта с помощью мастера Azure Active Directory, получил вход в тестовый проект, но когда я перенес старый код в новый тестовый проект, я получил точно такую ​​же ошибку, но вВ новом «Visual Studio Wizard» конфигурации было очень мало, и он взаимодействовал с моим Azure AD, зарегистрировал приложение и добавил все необходимые настройки, поэтому я знал, что это произойдет до добавления папок компонентов, и выдает точно такое же поведение после ошибкипапки функций, поэтому пришли к выводу, что это было связано с пользовательской маршрутизацией папок функций.

Ссылка на код, который я нашел, чтобы помочь реализовать папки функций, если кому-то интересно: https://github.com/ardalis/OrganizingAspNetCore/tree/master/CoreFeatureFolders

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

Необходимо указать URL-адрес ответа как в коде, так и при регистрации приложения в Azure AD. Вы должны установить свой URL-адрес для ответа, куда вы хотите перенаправить пользователя (как правило, это URL главной опубликованной домашней страницы - например, https://myapp.azurewebsites.net).

Для справки, вы можете увидеть примеры в примерах Github. https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-webapp-openidconnect/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...