2016-07-26 2 views
2

Я использую промежуточное ПО UseOpenIdConnectAuthentication для основного приложения ASP.Net для аутентификации с поставщиком токенов диспетчера доступа Dells Cloud (настройка для обеспечения аутентификации OpenId/OAuth2). Ниже приведен код:OpenIdConnectAuthenticationHandler: message.State имеет значение null или пусто

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AutomaticAuthenticate = true, 
      AutomaticChallenge = true, 
      AuthenticationScheme = "ClientCookie", 
      CookieName = CookieAuthenticationDefaults.CookiePrefix + "ClientCookie", 
      ExpireTimeSpan = TimeSpan.FromMinutes(5), 
      LoginPath = new PathString("/signin"), 
      LogoutPath = new PathString("/signout") 
     }); 

     app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      RequireHttpsMetadata = false, 
      SaveTokens = true, 
      ClientId = "XYZClient_Id", 
      ClientSecret = "XYZ_ClientSecret", 
      ResponseType = OpenIdConnectResponseType.Code, 
      PostLogoutRedirectUri = "https://example.com", 
      Configuration = new OpenIdConnectConfiguration { 
       AuthorizationEndpoint = "https://CAM.COM/CloudAccessManager/RPSTS/OAuth2/Default.aspx", 
       TokenEndpoint = "https://CAM.COM/CloudAccessManager/RPSTS/OAuth2/Token.aspx", 
       UserInfoEndpoint = "https://CAM.COM/CloudAccessManager/RPSTS/OAuth2/User.aspx", 
       Issuer= "urn:CAM.COM/CloudAccessManager/RPSTS", 
      } 
     }); 

Но я застрял в одной точке в течение нескольких часов. Я получаю следующую ошибку:

SecurityTokenInvalidSignatureException: IDX10500: проверка подписи не удалась. Там нет ключей безопасности, чтобы использовать для проверки подписи

Я получаю код и состояние обратно в URL строку запроса https://example.com/signin-oidc?code=somecode&state=somestate

Любой тип руководства ценится.


UPDATE Добавлена ​​Эмитент ключ подписи:

TokenValidationParameters = new TokenValidationParameters 
       { 
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.GetValue<string>("AppSettings:ClientSecret"))) 
       } 

ответ

3

Ошибка вы видите это вызвано тем, что вы не используя OpenID Connect provider configuration discovery feature предложенную РСИН промежуточного слоя, что позволяет получить криптографические ключи, используемые для подписи токенов.

Если ваш провайдер поддерживает эту функцию, удалите весь узел Configuration и установите вместо этого Authority. Все конечные точки должны быть автоматически зарегистрированы для вас.

Если он не поддерживает эту функцию, вам необходимо вручную добавить ключи подписи в OpenIdConnectOptions.TokenValidationParameters.IssuerSigningKeys.

+0

Это сэкономило много времени и может начать работу с ручным добавлением ключей подписи, поскольку мой провайдер не предоставляет конечную точку обнаружения конфигурации. Также спасибо за мгновенный ответ – CodeZero

+0

Если ответ будет полезен, не стесняйтесь его повышать/отмечать как принятое;) – Pinpoint

Смежные вопросы