Я пытался заставить AWS Инкогнито работать с ASP. NET Core 3.1 весь день, и мне не хватает одной важной части.
Код ниже близок, потому что:
Это будет
- Пусть пользователь go через встроенный ASP . NET Страницы регистрации и входа в систему для учетных записей пользователей
- Это приведет к тому, что для пользователя появятся записи как в таблице
AspNetUsers
, так и в таблице AspNetUserLogins
. Появляются в журнале пользователь, когда они проходят через ASP. Net Identity UI ExternalLogin.cshml
Метод обратного вызова страницы:
Но в действительности ASP. Net Личность этого пользователя не известна
Кроме того, это приведет к бесконечному l oop, если вы попытаетесь получить доступ к авторизованная страница, переадресация между запрашиваемой страницей, сервером AWS Cognito и встроенным маршрутом "signin-oid c".
Подозреваемая строка больше всего:
options.SignInScheme = IdentityConstants.ExternalScheme;
Как отмечают комментарии кода, комментирование этой строки нарушит встроенную регистрацию, но решить инфини tel oop проблема (а также пусть openid заявляет, что готовит ie оставайтесь заполненными).
Довольно ясно, что это close , но есть кое-что не совсем связанное, чтобы привести это все вместе.
var awsCognitoRegion = "us-east-1";
var awsCognitoPoolId = "******";
var metaDataAddress = $"https://cognito-idp.{awsCognitoRegion}.amazonaws.com/{awsCognitoPoolId}/.well-known/openid-configuration";
//var awsCognitoResponseType = "code";
var awsCognitoMetaAddress = metaDataAddress;
var awsCognitoClientId = "*******************";
var awsCognitoSecret = "**********************";
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
//fixes "Error loading external login information" error on Identity Login page / callback
//after external login...but breaks identity/cookie/claims?
//
//Also Causes infinite redirect problem via signin-oidc
options.SignInScheme = IdentityConstants.ExternalScheme;
//show all claims since MS filters some out...
options.ClaimActions.Clear();
//Tell .Net Core identity where to find the "name"
//options.TokenValidationParameters.NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress";
options.TokenValidationParameters.NameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier";
options.ResponseType = "code";
options.MetadataAddress = metaDataAddress;
options.ClientId = awsCognitoClientId;
options.ClientSecret = awsCognitoSecret;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
//I think all I need here is email
options.Scope.Add("email");
options.Scope.Add("profile");
options.Scope.Add("openid");
//options.Scope.Add("aws.cognito.signin.user.admin");
});