如何从外部管理(添加)ASP.NET Core 3.1应用程序的用户

问题描述 投票:3回答:1

很抱歉,这里没有提供代码,因为我完全不知道这个主意。

上下文:我开发了两个应用程序,都为ASP.NET Core 3.1,我们将它们称为A和B。

A是一个网站,可以访问互联网。只有具有有效用户帐户的用户才能访问。在应用程序A中不得注册一个用户。

B是内部(内部网)网站。 (使用Active Directory进行身份验证。)我希望能够从应用程序B创建应用程序A的用户。

应用程序A与Active Directory无关,我使用ASP.NET Core的常规内置用户管理。

是否可以通过使用实体框架将用户从应用程序B输入到应用程序A?还是有更好的方法?如果它与Entity Framework一起使用,我将如何获得应用程序A用来对密码加盐的Salt值?

为了澄清:我对应用程序B的用户身份验证或注册没有任何疑问,这一切正常。

entity-framework authentication password-encryption password-hash asp.net-core-3.1
1个回答
1
投票

由于在您提到的评论中,您只想知道盐的存储方式,所以我假设您已经建立了指向Application A成员资格数据库的EF,并将重点放在此哈希位上。我假设您使用UserManager来管理密码。

[如果您查看密码UserManagerstored的状态,您会发现两个操作最终都依赖verified来完成工作。它是框架将依赖项注入到UserManager中,并查看实现:

PasswordHasher

似乎salt只是一个随机的16字节数组,与PasswordHasherprivate static byte[] HashPasswordV3( string password, RandomNumberGenerator rng, KeyDerivationPrf prf, int iterCount, int saltSize, int numBytesRequested) { byte[] numArray1 = new byte[saltSize]; rng.GetBytes(numArray1); byte[] numArray2 = Microsoft.AspNetCore.Cryptography.KeyDerivation.KeyDerivation.Pbkdf2(password, numArray1, prf, iterCount, numBytesRequested); byte[] buffer = new byte[13 + numArray1.Length + numArray2.Length]; buffer[0] = (byte) 1; PasswordHasher<TUser>.WriteNetworkByteOrder(buffer, 1, (uint) prf); // hash type PasswordHasher<TUser>.WriteNetworkByteOrder(buffer, 5, (uint) iterCount); // number of iterations PasswordHasher<TUser>.WriteNetworkByteOrder(buffer, 9, (uint) saltSize); // salt size (although not configurable in this implementation) Buffer.BlockCopy((Array) numArray1, 0, (Array) buffer, 13, numArray1.Length); // salt goes here Buffer.BlockCopy((Array) numArray2, 0, (Array) buffer, 13 + saltSize, numArray2.Length); // password hash goes here return buffer; // this gets Base64-encoded upstream } hash一起存储,因此,由一个应用程序创建的哈希应该可以被另一个应用程序读取,而无需您做任何额外的工作只要hashing functionnumber of iterations used相同。

这里要注意的另一件事,由于PasswordHasherCompatibilityModePasswordHasherCompatibilityMode,因此实际上您可以根据需要用自己的实现替换它。希望戳一下generating OS可以为您提供足够的上下文。

© www.soinside.com 2019 - 2024. All rights reserved.