这是我第一次使用 IdentityServer 4 和 AspNetIdentity 设置 OpenID Connect,我希望有人能够揭开有关存储用户数据的部分的神秘面纱。
到目前为止,我读到的是用户数据应该存储在连接到身份验证服务器的身份验证数据库中,但我真的很想将用户数据存储在连接到资源服务器的资源数据库中。
我目前有一个如下所示的数据模型:
我省略了 User 和 Event 的许多字段,但希望您能了解情况。我们有一个用户表、一个事件表和一个主机表。用户可以主持活动。用户和事件之间的多对多关系是通过主机表。
这是一个关于架构的基本问题,但真的很难找到一个有意义的好答案,这不是一个完全的黑客。到目前为止,我已经阅读了来自不同人的以下解决方案:
仅将所有用户数据存储在 Auth 数据库中,然后在 Auth 服务器上设置 API,以便资源服务器可以从 Auth 服务器获取数据。
其他人说不应该将用户的城市或国家等非身份验证相关数据存储在身份验证数据库中。取而代之的是,仅在 Auth 服务器中保留与 auth 相关的数据,而在 Resource DB 中保留任何与用户相关的数据。这听起来像两个用户记录需要同步?听起来是个坏主意。
让资源服务器和身份验证服务器成为一个应用程序,以便我们可以在用户、主机和事件之间建立必要的关系。但这似乎违背了使用 OpenID Connect 的全部目的。
那么这里的标准架构是什么?或者,如果没有万能的,您将如何存储这些用户数据?
architecture asp.net-identity entity-framework-core openid-connect identityserver4
希望你能帮助我解决这个问题.
我正在将我的蓝牙代码从一个Activity移动到一个服务,但它无法将BluetoothManager置于服务中的构造函数中.它一直返回null.你知道为什么吗?
public class BluetoothService extends Service {
private Handler handler;
private static int secondsBetweenScans;
private BluetoothAdapter mBluetoothAdapter;
private Handler mHandler;
private boolean mScanning;
private Map<String, Integer> foundBluetoothDevicesAndTheirSignalStrengths;
private ArrayList<String> foundBluetoothDevices;
// Stops scanning after 10 seconds.
private static final long SCAN_DURATION = 2000;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public BluetoothService() {
Log.i("KontaktBluetoothService", "BluetoothService initialized");
// Initializes Bluetooth adapter.
final BluetoothManager mbluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); <-- Returns null
mBluetoothAdapter = mbluetoothManager.getAdapter();
.
.
.
}
@Override …Run Code Online (Sandbox Code Playgroud)