当前位置: 首页 > 知识库问答 >
问题:

.../name标识符在提供的声明标识中不存在

叶弘深
2023-03-14

我使用Identityserver3作为MVC应用程序的授权服务器。因此,我的Startup类如下:

public void Configuration(IAppBuilder app)
{

    app.UseExternalSignInCookie();
    JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = "Cookies"
    });
    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
    {
        Authority = "http://localhost:5000/",
        ClientId = "mvc",
        RedirectUri = "http://localhost:12262/",
        ResponseType = "id_token",
        UseTokenLifetime = false,
        SignInAsAuthenticationType = "Cookies"
    });
}

这是我的标识符用户子类:

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {

        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        userIdentity.AddClaim(new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", this.Email));
        userIdentity.AddClaim(
            new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider",
                this.Email));

        return userIdentity;
    }

    public UserType UserType { get; set; }
    ....
}

这是我的Global。尽快。cs

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
}

但是在我的帐户/注册表中,在包含@Html的行中查看。AntiForgeryToken()我收到此错误:

类型的索赔

提供的索赔标识中没有http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier。

我在SO上看到过一些类似问题的问题(可能在任何地方都没有使用标识符服务器3),但是它们的解决方案似乎不起作用,至少我使用它们的方式是这样。


共有1个答案

桂学
2023-03-14

恕我直言,我认为问题是索赔没有添加在正确的地方。但是为了证实这一点,我需要一些反馈。你在使用微软吗?AspNet.身份*(Nuget包)与身份服务器连接?您是通过代码创建用户还是从数据库中读取用户?

例如,我使用AspNet。与IdtyServer3身份,并为每个用户添加声明,您可以修改用户服务GetClaimsFrom帐户方法,如以下所示:

using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using IdentityServer3.Core;
using IdentityServer3.AspNetIdentity;
using IdentityServer3.Core.Configuration;
using IdentityServer3.Core.Services;

namespace ..... {

public class UserService : AspNetIdentityUserService<IdentityUser, string>
{
    public UserService(UserManager userMgr) : base(userMgr)
    {
    }

    protected override async Task<IEnumerable<System.Security.Claims.Claim>> GetClaimsFromAccount(IdentityUser user)
    {
        var claims = (await base.GetClaimsFromAccount(user)).ToList();

        // to make sure the email is in the claims
        if (claims.Any(c=>c.Type == Constants.ClaimTypes.Email) && !string.IsNullOrWhiteSpace(user.Email))
        {
            claims.Add(.....);
        }

        return claims;
    }
}
....
}

请注意,IdtyServer3.core带有包含声明类型的常量(常量。索赔类型。电子邮件)。

希望这有一点帮助:)

 类似资料:
  • 我相信在我的应用程序中看到了一些标识声明的缓存,该应用程序使用WSO2IS5.3.0。当通过UserStoreManager.SetUserClaimValues(例如,http://wso2.org/claims/identity/AccountDisabled)更改标识声明时,该更改需要一些时间才能反映在随后对UserStoreManager.GetUserClaimValues的调用中 我搜

  • 我最近换了我的ASP。NET应用程序到ASP。NET标识远离Azure的Active Directory配置。我在本地测试时没有问题,但是当我发布到Azure时,我得到以下错误: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier或http://schemas.microsoft.com/accesscontro

  • 我正在使用SODA for Java存储和检索Oracle12c DB中的文档。我正在效仿这个例子。 这一例外背后的原因将是什么?

  • 我正在调试一个非常大的树着色项目,在该项目中,作者使用glsl文件来着色树,但我在编译glsl文件时遇到了麻烦: 以下是错误日志: 我使用mac osx,Xcode7.0,OpenGL和glut都是默认版本。Glew版本是1.13.0。 这是因为版本与作者使用的原始版本不匹配吗?因为我检查了原始版本,所以他使用了GLEW 1.9.0和GLUT 3.7.6。 //////更新/////// 原来ma

  • 所以我一直有这个错误,我不知道发生了什么。我在谷歌上搜索了一下,读了一些关于这个错误的问题,但什么都没用。我只想运行它,这样我就可以完成我的项目。 错误:开始低库存;结束;*第1行错误:ORA-06550:第1行,第9列:PLS-00201:标识符“LOWINVENTORY”必须声明ORA-06550:第1行,第7列:PL/SQL:忽略语句 编辑: 表创建: