J'ai eu une question pour la création de jeton sans nom d'utilisateur et mot de passe ici Comment puis-je obtenir des jetons du point de bouvillon sans nom d'utilisateur et mot de passe dans IdentityServer4?

Mais récemment, j'ai décidé de mettre à jour mes projets pour utiliser .NET5, mais après cela, j'ai trouvé que mon hôte ne prend pas en charge .net5, donc j'ai supprimé tout .net5 et j'ai installé les versions sur 3.1.Mais en dessous de l'erreur, je ne sais pas Comment résoudre-le

Error   CS1061  'TokenCreationRequest' does not contain a definition for 'Resources' and no accessible extension method 'Resources' accepting a first argument of type 'TokenCreationRequest' could be found (are you missing a using directive or an assembly reference?)

Error   CS7036  There is no argument given that corresponds to the required formal parameter 'apiScopes' of 'Resources.Resources(IEnumerable<IdentityResource>, IEnumerable<ApiResource>, IEnumerable<ApiScope>)'

Mon code:

[HttpPost("Activate")]
        [AllowAnonymous]
        public async Task<IActionResult> Activate([FromBody] SignUpPhoneModel model, [FromServices] ITokenService TS, [FromServices] IUserClaimsPrincipalFactory<JooyaIdentityUser> principalFactory, [FromServices] IdentityServerOptions options)
        {           
            JooyaIdentityUser CurrentUser = await db.Users.Where(e => e.PhoneNumber == model.PhoneNumber).FirstOrDefaultAsync();
            
            if (!await UserManager.VerifyChangePhoneNumberTokenAsync(CurrentUser, model.ActivationCode, model.PhoneNumber))
            {
                return BadRequest("Activation Code in not correct");
            }
            CurrentUser.PhoneNumberConfirmed = true;
            await db.SaveChangesAsync();
            await UserManager.UpdateSecurityStampAsync(CurrentUser);
            var Request = new TokenCreationRequest();
            var IdentityPricipal = await principalFactory.CreateAsync(CurrentUser);
            var IdentityUser = new IdentityServerUser(CurrentUser.Id.ToString());
            IdentityUser.AdditionalClaims = IdentityPricipal.Claims.ToArray();
            IdentityUser.DisplayName = CurrentUser.UserName;
            IdentityUser.AuthenticationTime = System.DateTime.UtcNow;
            IdentityUser.IdentityProvider = IdentityServerConstants.LocalIdentityProvider;
            Request.Subject = IdentityUser.CreatePrincipal();
            Request.IncludeAllIdentityClaims = true;
            Request.ValidatedRequest = new ValidatedRequest();
            Request.ValidatedRequest.Subject = Request.Subject;

            Request.ValidatedRequest.SetClient(SeedConfig.GetClients().Where(e => e.ClientId == model.ClientId).First());
            List<ApiResource> Apis = new List<ApiResource>();
            Apis.Add(SeedConfig.GetApis().Where(e => e.Name == "IdentityServerApi").First());
            Apis.Add(SeedConfig.GetApis().Where(e => e.Name == model.ApiName).First());
            Request.Resources = new Resources(SeedConfig.GetIdentityResources(), Apis);// <=== Error is here
            Request.ValidatedRequest.Options = options;
            Request.ValidatedRequest.ClientClaims = IdentityUser.AdditionalClaims;
            var Token = await TS.CreateAccessTokenAsync(Request);
            Token.Issuer = HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value;
            Token.Lifetime = 32000000;
            var TokenValue = await TS.CreateSecurityTokenAsync(Token);
            TokenModel tm = new TokenModel()
            {
                access_token = TokenValue
            };
            return Ok(tm);
        }
0
mohsen 4 mai 2021 à 09:30

1 réponse

Meilleure réponse

Vous utilisez une Versión d'ItalyServer4 qui n'est pas compatible avec votre code. Le modèle de TokenCreationRequest a changé. La dernière version d'ItalyServer4 (4.1.1) n'a pas la propriété Resources. Il utilise ValidatedResources de type ResourceValidationResult.

Vous devez ajuster votre code ou votre déclassement à une ancienne version d'ItalyServer <4.0.0.

1
Alpha75 4 mai 2021 à 11:55