Пользовательский ресурс / претензия не возвращается в "userinfo" - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь добавить некоторые пользовательские утверждения в свой поток IdentityServer4, но не могу их отобразить в конечной точке /userinfo.

Сейчас я использую только конфигурацию "в памяти", поэтому в этом я создал новую IdentityResource со своей настраиваемой областью действия:

new IdentityResource {
    DisplayName = "My Custom Resource",
    Name = "mycustom",
    UserClaims = new List<string> {
        "mycustom.myvalue"
    }
}

И я установил, чтобы мой клиент мог использовать это:

new Client {
    AllowedScopes = {
        IdentityServerConstants.StandardScopes.OpenId,
        "mycustom"
    }
}

Затем, при успешном входе в систему, я делаю следующее, чтобы войти в систему, прежде чем перенаправить обратно на /authorize/callback

await _events.RaiseAsync(new UserLoginSuccessEvent(
    "provider",
    "providerUserID",
    "subjectID",
    "name"));
await HttpContext.SignInAsync(
    "subject",
    "name",
    new AuthenticationProperties(),
    new Claim("mycustom.myvalue", "987654321"));

Теперь я могу выполнить полный поток authorize с ?scope=openid+mycustom, но когда я выполняю вызов к конечной точке userinfo, он не возвращает mycustom.myvalue

Я, вероятно, только упускаю некоторые мелкие детали, но я не могу понять, что ... так чего мне не хватает, чтобы заставить это работать?

1 Ответ

0 голосов
/ 28 мая 2019

Это не работает, потому что при добавлении заявки через HttpContext.SignInAsync(..., new Claim("mycustom.myvalue", "987654321")) она сохраняется только тогда, когда пользователь фактически присутствует, и ClaimsPrincipal создается посредством аутентификации cookie.

Поскольку вы возвращаетесь обратно к /userinfo, он будет выдавать вам только заявления о том, что по умолчанию IProfileService обычно вернется, и не может знать об этом дополнительном требовании.

Попробуйте добавить эту заявку непосредственно к одному из TestUser (если вы используете в памяти пользователей):

    public static List<TestUser> GetUsers()
    {
        return new List<TestUser>
        {
            new TestUser
            {
                SubjectId = "1",
                Username = "alice",
                Password = "password",

                Claims = new []
                {
                    new Claim("name", "Alice"),
                    new Claim("website", "https://alice.com"),
                    new Claim("mycustom.myvalue", "987654321")
                }
            }....
...