TokenCreationRequest 不包含资源的定义
TokenCreationRequest does not contain a definition for Resources
我有一个关于在没有用户名和密码的情况下创建令牌的问题
但最近我决定更新我的项目以使用 .net5,但之后我发现我的主机不支持 .net5,所以我删除了所有 .net5 并将版本安装到 3。1.But有没有下面的错误我不知道怎么解决
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>)'
我的代码:
[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);
}
您使用的 IdentityServer4 版本与您的代码不兼容。 TokenCreationRequest
的模型已更改。最新版本的 IdentityServer4 (4.1.1) 没有 Resources
属性。它使用类型为 ResourceValidationResult
的 ValidatedResources
。
您需要调整代码或降级到 IdentityServer < 4.0.0 的旧版本。
我有一个关于在没有用户名和密码的情况下创建令牌的问题
但最近我决定更新我的项目以使用 .net5,但之后我发现我的主机不支持 .net5,所以我删除了所有 .net5 并将版本安装到 3。1.But有没有下面的错误我不知道怎么解决
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>)'
我的代码:
[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);
}
您使用的 IdentityServer4 版本与您的代码不兼容。 TokenCreationRequest
的模型已更改。最新版本的 IdentityServer4 (4.1.1) 没有 Resources
属性。它使用类型为 ResourceValidationResult
的 ValidatedResources
。
您需要调整代码或降级到 IdentityServer < 4.0.0 的旧版本。