OAuth 2.0实现-身份验证服务器和资源服务器应该有单独的数据库



官方规范可能没有提到这一点,或者认为它"超出了本规范的范围"。

假设我们已经决定将身份验证服务器和资源服务器分开。

在实践中,我们为什么要让资源和身份验证服务器访问同一个数据库,或者为什么要保留两个独立的数据库——每个服务器一个?

我写这个问题是因为实体框架。如果我在两个站点之间共享同一个数据库,我认为即使身份验证服务器只接触与帐户相关的表,而资源服务器只接触数据(POCO)表,迁移也会发生冲突。(事实上,我还没有尝试过,但我不想浪费时间进行实验,所以我想听听有人的意见。)

但是,如果我分离数据库,我就会失去用户和他拥有的数据之间的外键关系——但这是必要的吗?这感觉就像是一种"我们这么做只是因为"的做法。

要将它们组合起来并使用迁移,您需要有一个用于迁移的DbContext,其中包括auth或资源服务器使用的所有类型,并将其用于脚手架迁移。对于那些需要多个上下文并希望使用迁移的人来说,这似乎是一种常见的做法;到目前为止,它对我很有效。

至于外键约束,它们只是那个约束。它们在数据库级别强制执行您的业务规则(Foo.Bar必须包含Baz.Bar中存在的值)。这是否有必要取决于您的用例。很少有事情是"仅仅因为"做的,尽管很多事情都是在没有完全理解的情况下做的——"因为我在其他地方看到过这样做"。其他地方(或他们复制它的地方,等等)可能有一个完全合理的理由,这可能适用于也可能不适用于您的用例。

相关内容

最新更新