Получить ExternalClaim информацию о личности - PullRequest
0 голосов
/ 27 сентября 2019

Я использую OWIN Oauth Instagram для входа в приложение MVC 5 со следующим кодом:

Startup.Auth.cs

 app.UseInstagramAuthentication(new InstagramAuthenticationOptions()
            {
                ClientId = "myCID",
                ClientSecret = "mySecret",
                SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie,

                Provider = new InstagramAuthenticationProvider()
                {
                    OnAuthenticated = (context) =>
                    {
                        context.Identity.AddClaim(new Claim("igAccessToken", context.AccessToken));
                        context.Identity.AddClaim(new Claim("igFullName", context.FullName));
                        context.Identity.AddClaim(new Claim("igProfilePic", context.ProfilePicture));
                        context.Identity.AddClaim(new Claim("igUsername", context.UserName));

                        foreach (var claim in context.User)
                        {
                            var claimType = string.Format("{0}", claim.Key);
                            string claimValue = claim.Value.ToString();

                            if (!context.Identity.HasClaim(claimType, claimValue))
                                context.Identity.AddClaim(new Claim(claimType, claimValue, "XmlSchemaString", "Instagram"));
                        }
                        return Task.FromResult(0);
                    }
                }
            });

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

SomeController.cs

    var info = await AuthenticationManager.GetExternalLoginInfoAsync();

                var pic = info.ExternalIdentity.Claims.First(c => c.Type == "igProfilePic").Value;
                var fullName = info.ExternalIdentity.Claims.First(c => c.Type == "igFullName").Value;
                var accessToken = info.ExternalIdentity.Claims.First(c => c.Type == "igAccessToken").Value;

Приведенный выше код выдает Object reference not set to an instance of an object., и после отладки ничего в информационном контексте не заставляет меня думать, что утверждение никогда не сохраняется вКонтекст ExternalIdentity?

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

1 Ответ

1 голос
/ 28 сентября 2019

Вы должны иметь доступ к GetExternalLoginInfoAsync в методе ExternalLoginConfirmation AccountController, см. Документацию .Здесь заявки должны быть доступны для дальнейшей обработки, например, для ручного добавления заявок в базу данных, если это необходимо.

Если заявки были добавлены в таблицу IdentityUserClaim, вы сможете получить доступих в других действиях контроллера (см. также ответ ), используя:

IEnumerable<Claim> claims = (ClaimsIdentity)User.Identity.Claims;

Дополнительную информацию можно найти в Общие сведения о конвейере внешней аутентификации Owin .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...