ASPNET Core с OpenId Connect и Azure AD - PullRequest
       16

ASPNET Core с OpenId Connect и Azure AD

0 голосов
/ 24 апреля 2018

На веб-сайте Azure запущено приложение ASP.NET Core.Сайт был настроен для аутентификации с использованием Azure AD в соответствии с этим этим примером

Мы тестировали сайт с группой пользователей, и первоначально они могли получить доступ к сайту.Примерно через 24 часа, когда они пытаются получить доступ к сайту, происходит цикл между / signin-oidc на моем сайте и конечной точкой авторизации https://login.microsoftonline.com, а затем происходит сбой с неисправным шлюзом 502.3.

Не уверен, что это связано, но я также вижу это в журналах

Авторизация не удалась для пользователя: (null).

Это происходит надва веб-сайта Azure (подготовка и создание), но я не могу скопировать его на своем ноутбуке, работающем локально.

Это код, который я использую в StartUp.cs

services.AddAuthentication(options => 
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;

}).AddOpenIdConnect(options =>
{
    options.ClientId = azureAdOptions.ClientId;

    var scopes = new List<string>
    {
        "openid,",
        "email",
        "profile,",
        "offline_access",
        "user_impersonation",
        "User.Read",
        "Mail.Read",
        "Mail.Send",
        "Directory.Read",
        "User.ReadBasic.All",
        "Calendars.ReadWrite",
        "Sites.ReadWrite.All"
    };

    foreach (var scope in scopes)
    {
        options.Scope.Add(scope);
    }

    options.Resource = graphOptions.ResourceId;
    options.Authority = $"{azureAdOptions.AadInstance}{azureAdOptions.Tenant}";
    options.SignedOutRedirectUri = azureAdOptions.PostLogoutRedirectUri;
    options.CallbackPath = "/signin-oidc";
    options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
    options.Events = new OpenIdConnectEvents
    {
        OnRemoteFailure = OnAuthenticationFailed,
        OnAuthorizationCodeReceived = async (context) =>
        {
            var code = context.ProtocolMessage.Code;
            var identifier = context.Principal.GetObjectIdentifierValue();
            var provider = services.BuildServiceProvider();
            var authProvider = provider.GetService<IInSiteAuthProvider>();

            var result = await authProvider.GetTokenByAuthorizationCodeAsync(identifier, code);

            if (result == null)
            {
                context.Fail("couldn't get auth code");
            }
            else
            {
                context.HandleCodeRedemption(result.AccessToken, result.IdToken);
            }
        }
    };
}).AddCookie();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...