繁体   English   中英

如何使用本地身份帐户启用 OpenID Connect 流?

[英]How to enable OpenID Connect flow with local Identity accounts?

我正在开发一个由 ASP.NET Core 服务器、Angular SPA 和远程 OpenID Connect 服务器 (IdentityServer4) 组成的新解决方案。 当远程 OpenID Connect 服务器不可访问时,例如当互联网连接丢失时,我希望允许用户使用他们的本地身份用户帐户进行连接。

默认情况下,本地帐户在使用 Asp.Net CORE Identity 时依赖于 cookie,这显然很糟糕,因为我希望 Angular SPA 仅使用 OpenID Connect,而不是开发多个提供程序/流。

是否可以在我的 ASP.NET Core 服务器应用程序上开发一个授权端点(我只使用“隐式”授权类型),当它可以访问时,它会重定向到我的 OpenID Connect 服务器的授权端点,这将返回本地当 OpenID Connect 服务器不可用时计算令牌? 这样,我的 Angular SPA 将只知道我的 ASP.NET Core 服务器的授权端点,而后者将能够根据需要从本地帐户切换到远程帐户。

提前致谢

我将根据我对您的问题的理解来回答。

首先在您的 .Net Core 应用程序中实现 JWT 承载身份验证。 实现另一个端点,假设Login接受用户名和密码。 这些用户名和密码保存在本地数据库中。 Login实现方式应在成功对数据库进行凭据验证后返回 JWT 不记名令牌。

现在您的 SPA 应该首先将授权请求发送到身份服务器。 如果它成功,那么根据您的问题没有问题。 但是,如果它是与不可用相关的其他错误代码,则根据该响应,您必须提示另一个登录屏幕,供用户提供本地凭据。 然后一个请求将发送到我们之前实现的Login端点,在那里传递的凭据将根据数据库进行验证,如果凭据有效,SPA 会收到一个 JWT 不记名令牌。

因此,最后,我选择将我的 Asp.Net Core 转换为 IdentityServer,以便 SPA 仅请求该服务器,而不知道我的远程 IdentityServer,并将后者添加为外部提供程序(使用 AddOpenIDConnect 服务集合扩展方法) .

在我的 Asp.Net Core 服务器的登录操作中,我检查远程 IdentityServer 是否可用。

如果是,我会使用“idsrv.external”方案对其进行挑战,从而无缝地将用户重定向到外部 IdentityServer。

如果不是,我会按照 IdentityServer4 文档中的描述继续进行正常的登录过程。

这样,我的 SPA 只需要知道我的服务器的 url,后者无缝地提供令牌,它应该自己生成它还是将它委托给外部 IdentityServer x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM