Asp.net UseOpenIdConnectAuthentication не работает в Azure - PullRequest
1 голос
/ 18 марта 2019

Я использую UseOpenIdConnectAuthentication для аутентификации пользователей.Мой код приложения хорошо работает локально.Но когда я запускаю его в Azure, событие SecurityTokenValidated никогда не запускается.Следовательно, код работает нормально, но пользователь никогда не проходит аутентификацию.Я не уверен, связана ли проблема с моим кодом или с Azure.Это используется в веб-форме, приложении Asp.net (не Core).Я использую функцию трассировки Azure для входа.Я вижу, что только "RedirectToIdentityProvider" запускается.Никакое другое событие не вызывается.Вот мой код:

Startup.Auth.Vb:

 Public Sub ConfigureAuth(app As IAppBuilder)

      Dim clientId As String = ""
      Dim authority As String = ""
      Dim redirectURI As String

      Trace.TraceInformation("Hit Config Auth function")
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
      JwtSecurityTokenHandler.DefaultInboundClaimTypeMap = New Dictionary(Of String, String)

      app.SetDefaultSignInAsAuthenticationType("Cookies")
      app.UseCookieAuthentication(New CookieAuthenticationOptions() With {
                .AuthenticationMode = AuthenticationMode.Active,
                .CookieManager = New SystemWebCookieManager
            })  


      redirectURI = appSettings("ID_Redirect_URI")
      clientId = appSettings("ID_ClientID")
      authority = appSettings("ID_Authority")
      Trace.TraceInformation(redirectURI)
      Trace.TraceInformation(clientId)
      Trace.TraceInformation(authority)

      Trace.TraceInformation("creating OpenIDAuthOptions")
      Dim OpenIdAuthOption = New OpenIdConnectAuthenticationOptions() With {
           .SignInAsAuthenticationType = "Cookies",
           .Authority = authority,
           .RequireHttpsMetadata = False,
           .ClientId = clientId,
           .ResponseType = "id_token",
           .Scope = "openid profile roles",
           .RedirectUri = redirectURI,
           .PostLogoutRedirectUri = redirectURI,
           .Notifications = New OpenIdConnectAuthenticationNotifications() With {
                .AuthenticationFailed = Function(ctx)
                      Trace.TraceInformation("Auth Failed event")
                      Return Task.FromResult(0)
                 End Function,
                 .SecurityTokenReceived = Function(ctx)
                      Trace.TraceInformation("Sec Token Recieved event")
                      Return Task.FromResult(0)
                  End Function,
                  .MessageReceived = Function(ctx)
                      Trace.TraceInformation("Message Recieved event")
                      Return Task.FromResult(0)
                      End Function,
                  .SecurityTokenValidated = Function(ctx)
                     Trace.TraceInformation("Security token validated")                          
                     Return Task.FromResult(0)
                     End Function,
                  .AuthorizationCodeReceived = Function(ctx)
                     Trace.TraceInformation("Auth Code Recieved event")
                     Return Task.FromResult(0)
                     End Function,
                  .RedirectToIdentityProvider = Function(context)
                   Trace.TraceInformation("start of RedirectToIDProvider")
                    Return Task.FromResult(0)
                    End Function
                    }
            }

            Trace.TraceInformation("adding OpenIdAuthOptyions")
            app.UseOpenIdConnectAuthentication(OpenIdAuthOption)
            Trace.TraceInformation("finihsed adding OpenIdAuthOptyions")
        End Sub

Как я уже упоминал выше, этот код отлично работает локально.Он не работает только при размещении в Azure.При локальном запуске события запускаются в следующем порядке:

  1. RedirectToIdentityProvider
  2. Получено сообщение
  3. Получен токен безопасности
  4. Подтвержден токен безопасности

Но в Azure срабатывает только RedirectToIdentityProvider.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Изменено значение Action to take when request is not authenticated в службе приложений Authentication/Authorization на портале Azure с LogIn with Azure Active Directory до Allow Anonymous requests.Как показано на рисунке ниже:

enter image description here

Затем будет запущен SecurityTokenValidated.Аутентификация сервисов приложения происходит вне вашего приложения, поэтому настраиваемый код аутентификации в вашем приложении никогда не получает возможности для запуска.Когда вы отключаете это, оно позволяет вашему приложению обрабатывать саму аутентификацию так же, как и локально.

Здесь описана похожая проблема , к которой вы могли обратиться.

1 голос
/ 19 марта 2019

Попробуйте изменить манифест приложения определения приложения в Azure, чтобы установить для свойства "oauth2AllowIdTokenImplicitFlow" значение true из false.

  1. Перейти на портал Azure,
  2. Выбрать для AzureActive Directory
  3. Выбор регистрации приложений
  4. Выбор приложения.
  5. Нажмите на манифест
  6. Найдите значение oauth2AllowIdTokenImplicitFlow и измените его значение на true
  7. Нажмите Сохранить

2) В файле startup.cs измените следующее:

ResponseType = OpenIdConnectResponseType.Code
to
ResponseType = OpenIdConnectResponseType.CodeIdToken

и посмотрите, поможет ли это.

...