Какова цель дополнительных локальных заявлений в Identity Server 4 SignInAsync - PullRequest
0 голосов
/ 25 февраля 2020

В Identity Server 4, Быстрый старт, метод ExternalController.cs - CallBack, я обнаружил следующее:

// this allows us to collect any additonal claims or properties
// for the specific prtotocols used and store them in the local auth cookie.
// this is typically used to store data needed for signout from those protocols.
var additionalLocalClaims = new List<Claim>();
var localSignInProps = new AuthenticationProperties();
ProcessLoginCallbackForOidc(result, additionalLocalClaims, localSignInProps);

// issue authentication cookie for user
await HttpContext.SignInAsync(user.SubjectId, user.Username, provider, localSignInProps, additionalLocalClaims.ToArray());

Полный код можно посмотреть по этой ссылке - IdentityServer4 .Quickstart.UI

Я попытался добавить некоторые утверждения в этот список additionalLocalClaims, выполнив следующее:

additionalLocalClaims.Add(new Claim("TestName", "TestValue"));

Но он никогда не появляется в UserClaims или AccessToken, даже если ClaimType «TestName» включен в ApiResource.

Я хотел бы добавить некоторые пользовательские утверждения / значения в AccessToken для аутентификации Google, и я подумал, что AdditionalLocalClaims - это то, что нужно для добавления дополнительных утверждений.

PS Я наконец-то реализовал IProfileService и смог вернуть дополнительные претензии. Но я все еще хочу знать, каков вариант использования этого additionalLocalClaims в HttpContext.SignInAsync методе расширения.

1 Ответ

0 голосов
/ 25 февраля 2020

Существуют методы расширения, связанные с аутентификацией, в HttpContext от ASP. NET Ядро для выдачи аутентификации cook ie и входа пользователя в систему, и вы можете добавить собственные климы для готовки ie для сеанса аутентификации Identity Server 4. Например, вы можете добавить заявки, необходимые для выхода, некоторые внешние поставщики удостоверений могут выдать заявку на идентификатор сеанса, вы можете включить ее в локальную аутентификацию ie через additionalLocalClaims, которую можно использовать для выполнения единый выход из внешнего провайдера идентификации, если пользователь вышел из системы на вашем сервере идентификации. Но заявки хранятся в локальной аутентификации ie IDS4, они не находятся в токене ID, токене доступа и конечной точке userinfo. Вы можете реализовать IProfileService, как вы сказали, для включения пользовательских утверждений в токены или конечную точку userinfo.

...