小编Flo*_*n K的帖子

IdentityServer使用外部提供程序登录不能用于长login_hint或acr_values

在我的OpenIdConnectAuthenticationOptions设置OpenIdConnectAuthenticationNotifications RedirectToIdentityProvider

它看起来像这样:

RedirectToIdentityProvider = n =>
{
    if (n.ProtocolMessage.RequestType == Microsoft.IdentityModel.Protocols.OpenIdConnectRequestType.AuthenticationRequest)
    {
        n.ProtocolMessage.LoginHint = "LoginHint";
        n.ProtocolMessage.AcrValues = "idp:CustomIdProvider";
    }
    return Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我能够收到LoginHint,一切正常.

现在,如果我设置LoginHint为大约1000个字符长的东西(同样的情况发生AcrValues),IdentityServer会显示一条错误消息:

确定您要登录的应用程序时出错.返回应用程序,然后重试.

并且日志显示以下消息:

找不到与cookie匹配的登录ID

这仅在LoginHint(或AcrValues)达到一定大小时发生

在存储cookie或阅读cookie时似乎存在问题,可能它们很大

我已经尝试/配置的内容:

客户端和服务器的Web配置(根据这个答案,所有这些值应该足够高,我会在它工作时将它们减少到适当的值):

<system.web>
    <httpRuntime targetFramework="4.6.1" maxUrlLength="109990" maxQueryStringLength="100000" maxRequestLength="256000" />
</system.web>
<!--...-->
<requestFiltering>
    <requestLimits maxQueryString="100000" maxAllowedContentLength="1073741824" />
</requestFiltering>
Run Code Online (Sandbox Code Playgroud)

InputLengthRestrictionsIdentityServerOptions(再一次的值应该是足够了):

InputLengthRestrictions = new InputLengthRestrictions
{
    UserName = 51200,
    AcrValues = 51200,
    LoginHint …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc owin identityserver3

6
推荐指数
1
解决办法
681
查看次数

如何使用自定义用户服务添加声明以访问IdentityServer3的令牌

我正在尝试创建一个自定义用户,对其进行身份验证,然后使用身份服务器3将用户声明返回到有角度的应用程序中。我查看了示例,尤其是CustomUserService项目。

编辑我已根据进度将问题更新为:

在starup.cs文件中,我具有作用域,并且正在加载客户端

var idServerServiceFactory = new IdentityServerServiceFactory()
                    .UseInMemoryClients(Clients.Get())
                    .UseInMemoryScopes(Scopes.Get());
                   //.UseInMemoryUsers(Users.Get());
Run Code Online (Sandbox Code Playgroud)

然后在UserServices.cs中覆盖

public override Task AuthenticateLocalAsync(LocalAuthenticationContext context)
        {
            string hashedPassword = string.Empty;
        string salt = string.Empty;

        //pull users 
        using (IdentityModelContext ctx = new IdentityModelContext())
        {
            IIdSrvUserRepository ur = new IdSrvUserRepository(ctx);
            Users = ur.GetAll().ToList();
           }
        //salt curent password        
        var user = Users.SingleOrDefault(x => x.UserName == context.UserName);
        if (user != null)
        {
            salt = user.Salt;
            hashedPassword = IqUtils.GenerateSaltedPassword(context.Password, salt);
            if (user.UserName == context.UserName && hashedPassword == user.Password)
            {
                try
                {
                    context.AuthenticateResult = …
Run Code Online (Sandbox Code Playgroud)

c# claims-based-identity identityserver3

5
推荐指数
1
解决办法
3834
查看次数

实体框架 - 为每个循环保存数据到SQL服务器

我正在用c#.net实体框架和sql server 2008r2开发应用程序.这是我的代码

C#.net代码

foreach (var tempProduct in purchaseDetailTemp)
{
    invPurchase = new InvPurchaseDetailTemp();
    invPurchase.ProductID = tempProduct.InvProductMasterID;
    invPurchase.ProductCode = tempProduct.ProductCode;
    invPurchase.ProductName = tempProduct.ProductName;
    context.InvPurchaseDetails.Add(invPurchase);
    context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

purchaseDetailTemp是我的数据表.我想在没有foreach循环的情况下保存数据.我正在尝试使用mergeSql批量插入.有没有办法做到这一点?

c# entity-framework-6

3
推荐指数
1
解决办法
951
查看次数