IdentityServer Facebook Auth изменяет идентификатор субъекта / не является идентификатором facebook

Я включил IdentityServer для аутентификации в Facebook с неявным потоком.

теперь, когда я аутентифицируюсь, я получаю значение идентификатора в качестве субъекта. например 502967fe0125ce3ff75050ef7b83fd68, я использовал его как идентификатор пользователя для хранения данных, связанных с пользователем. Но время от времени вроде меняется содержание темы и я получаю другой id.

Я неправильно понимаю концепцию Субъекта. Ожидается ли, что он изменится?

Разве идентификатор субъекта не должен быть постоянным? Какую информацию следует использовать для хранения данных, связанных с пользователем?

Вот как я настраиваю провайдера facebook на сервере идентификации:

 public static void Configure(IAppBuilder app, string signInAsType)
        {
            var fb = new FacebookAuthenticationOptions
            {
                AuthenticationType = "Facebook",
                Caption = "Facebook",
                SignInAsAuthenticationType = signInAsType,
                AppId = myAppId,
                AppSecret = mySecret 
            };
            app.UseFacebookAuthentication(fb);
        }

А вот конфиг клиента на сайте

   JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            AuthenticationType = "oidc",
            SignInAsAuthenticationType = "cookies",

            ClientId = "website",
            Authority = identServer,
            RedirectUri = "http://localhost/pluto/",
            ResponseType = "id_token token",
            Scope = "openid profile email warehouseapi"
        }

person Boas Enkler    schedule 06.10.2016    source источник
comment
Просто я поинтересовался. Почему бы вам не использовать SecurityTokenValidated вместо AuthorizationCodeReceived для изменения утверждения личности?   -  person adem caglin    schedule 06.10.2016
comment
использован код из примера из курса по множественному праву   -  person Boas Enkler    schedule 06.10.2016
comment
кстати изменил его на securityTokenValidated. но все же время от времени тема меняется...   -  person Boas Enkler    schedule 06.10.2016


Ответы (2)


Вложенное утверждение представляет собой уникальный идентификатор пользователя в контексте STS.

Обычно это означает, что новая подпрограмма создается при первом входе пользователя в систему. Затем эта подпрограмма связывается с внешним логином (имя эмитента и внешняя подпрограмма) и используется повторно.

person leastprivilege    schedule 07.10.2016
comment
хорошо, так что наиболее распространенным способом было бы теперь использовать пользователей в памяти, чтобы они не менялись правильно? что было бы хорошим способом, если бы я также хотел иметь идентификатор facebook? Нужен ли мне пользовательский сервис? - person Boas Enkler; 07.10.2016
comment
Вы никогда не будете использовать хранилище в памяти вне разработки, демонстрации или тестирования. - person leastprivilege; 07.10.2016
comment
да это понятно. В настоящее время я только оцениваю серверные функциональные возможности, и я начал с примеров из множественного числа, которые основаны на внедрении in memroy. А также я пытаюсь понять, в чем причины некоторых вещей, почему они ведут себя так, а не иначе. - person Boas Enkler; 07.10.2016

Нашел причину. Возвращаемый идентификатор в sub — это идентификатор пользователя сервера идентификации, а не идентификатор facebook. И поскольку я использую реализацию памяти, каждый раз, когда сервер идентификации перезапускается, идентификатор меняется.

Так что для меня это закрыто, но все еще остается вопрос, является ли это желательным поведением.

Должен ли это быть скорее идентификатор facebook, который помещается в тему?

person Boas Enkler    schedule 07.10.2016
comment
Это имеет смысл. Facebook и все другие IDP должны возвращать одну и ту же подпрограмму для одного и того же пользователя, в то же время было бы неплохо иметь собственную подпрограмму для этого пользователя в собственной реализации сервера идентификации. - person Lutando; 07.10.2016