我已经在很大程度上基于Thinktecture的IdentityServer V3创建了一个OpenID Connect / Authorization服务器。为简单起见,假设整个平台包含以下内容:
- 托管IdentityServer v3的ASP.NET Web API,并公开控制器以管理Idv3用于OpenID Connect的ASP.NET Identity实现。我们称之为AuthServer。
- 另外两个资源服务器,也就是ASP.NET Web API,我们可以称之为API1和API2。
- 总共3个基于AngularJS的隐式客户端,分别用于API(AuthServer管理前端,API1前端和API2前端)。
还有其他几个客户(移动应用程序等等),但它们与问题无关。
当新用户尝试在平台上注册时,无论是从API1还是API2的前端,他们都会通过Angular前端的向导,在此过程中,用户通过AuthServer API(ASP。 NET身份)。此时,用户通过AuthServer进行身份验证,并且他们同时拥有令牌和id_token,并且可以通过前端成功使用他们注册的API的服务。
我遇到的困难有两个:
- 您通常会在哪里存储用户详细信息? AuthServer至少需要一个电子邮件地址(电子邮件地址验证和丢失的密码)以及名字和姓氏,以使通信更加个性化。有问题的API(API1或API2)需要有关用户的各种详细信息(地址,出生日期等),由于这种可变性,将它们存储在身份服务器中是没有意义的。我倾向于在两个地方存储First,Last和Email的初始注册值,然后仅允许应用程序(API1和API2)的前端更新,并使这些应用程序负责通过客户端凭据流更新AuthServer。这最有意义吗?
- 我正在使用UseIdentityServerBearerTokenAuthentication,它是我的OWIN管道中UseOAuthBearerAuthentication的包装器。我能够成功地授权用户,验证我的声明等...但是我很难确定如何成功地使发布权限脱离上下文并确定管道中正确位置的位置以调用userinfo终点以便从AuthServer检索用户详细信息。我可以在控制器级别执行此操作,向其中注入用户详细信息服务但我真的希望在更高级别执行此操作并将详细信息附加到用户身份,以便如果应用程序需要有关用户的一些特定详细信息,每次调用它时,API都可以调用AuthServer来检索它们。这在UseOpenIdConnectAuthentication MVC实现中非常简单,因为它们具有允许直接访问身份验证票证的事件。有没有正确的"这样做的方法?
醇>