在我的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)
InputLengthRestrictions在IdentityServerOptions(再一次的值应该是足够了):
InputLengthRestrictions = new InputLengthRestrictions
{
UserName = 51200,
AcrValues = 51200,
LoginHint …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个自定义用户,对其进行身份验证,然后使用身份服务器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#.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和批量插入.有没有办法做到这一点?