如何使用本地身份帐户启用 OpenID Connect 流程?
How to enable OpenID Connect flow with local Identity accounts?
我正在开发一个由 ASP.NET 核心服务器、Angular SPA 和远程 OpenID Connect 服务器 (IdentityServer4) 组成的新解决方案。我想允许用户在无法访问远程 OpenID Connect 服务器时使用其本地身份用户帐户进行连接,例如当互联网连接丢失时。
默认情况下,本地帐户在使用 Asp.Net CORE Identity 时依赖于 cookie,这显然很糟糕,因为我希望 Angular SPA 仅使用 OpenID Connect,而不是开发几个 providers/flows.
是否可以在我的 ASP.NET 核心服务器应用程序上开发一个授权端点(我只使用 'implicit' 授权类型),它会重定向到我的 OpenID Connect 服务器的授权端点是可达的,并且当 OpenID Connect 服务器不可用时,这将是 return 本地计算的令牌?这样,我的 Angular SPA 将只知道我的 ASP.NET 核心服务器的授权端点,后者将能够根据需要从本地帐户切换到远程帐户。
提前致谢
我会根据我对你问题的理解来回答。
首先在您的 .Net Core 应用程序中实施 JWT 承载身份验证。实现另一个端点,假设 Login
接受用户名和密码。这些用户名和密码本地保存在数据库中。 Login
应该以 returns 一个 JWT 持有者令牌的方式实现,在对数据库成功进行凭据验证后。
现在您的 SPA 应该首先将授权请求发送到身份服务器。如果成功,则根据您的问题没有问题。但是,如果它是与不可用相关的其他一些错误代码,则根据该响应,您必须提示另一个登录屏幕供用户提供本地凭据。然后请求将发送到我们之前实现的 Login
端点,其中传递的凭据将根据数据库进行验证,如果凭据有效,SPA 将接收 JWT 不记名令牌。
所以,最后,我选择将我的 Asp.Net Core 变成一个 IdentityServer,这样 SPA 就只请求该服务器,而不知道我的远程 IdentityServer,并将后者添加为外部提供者(与 AddOpenIDConnect 服务集合扩展方法)。
在我的 Asp.Net 核心服务器的登录操作中,我检查远程 IdentityServer 是否可用。
如果是,我会用 'idsrv.external' 方案挑战它,从而无缝地将用户重定向到外部 IdentityServer。
如果不是,我将按照 IdentityServer4 文档中的描述继续正常的登录过程。
这样,我的 SPA 只需要知道我的服务器的 url,而后者无缝地提供令牌,它应该自己生成它还是将它委托给外部 IdentityServer x)
我正在开发一个由 ASP.NET 核心服务器、Angular SPA 和远程 OpenID Connect 服务器 (IdentityServer4) 组成的新解决方案。我想允许用户在无法访问远程 OpenID Connect 服务器时使用其本地身份用户帐户进行连接,例如当互联网连接丢失时。
默认情况下,本地帐户在使用 Asp.Net CORE Identity 时依赖于 cookie,这显然很糟糕,因为我希望 Angular SPA 仅使用 OpenID Connect,而不是开发几个 providers/flows.
是否可以在我的 ASP.NET 核心服务器应用程序上开发一个授权端点(我只使用 'implicit' 授权类型),它会重定向到我的 OpenID Connect 服务器的授权端点是可达的,并且当 OpenID Connect 服务器不可用时,这将是 return 本地计算的令牌?这样,我的 Angular SPA 将只知道我的 ASP.NET 核心服务器的授权端点,后者将能够根据需要从本地帐户切换到远程帐户。
提前致谢
我会根据我对你问题的理解来回答。
首先在您的 .Net Core 应用程序中实施 JWT 承载身份验证。实现另一个端点,假设 Login
接受用户名和密码。这些用户名和密码本地保存在数据库中。 Login
应该以 returns 一个 JWT 持有者令牌的方式实现,在对数据库成功进行凭据验证后。
现在您的 SPA 应该首先将授权请求发送到身份服务器。如果成功,则根据您的问题没有问题。但是,如果它是与不可用相关的其他一些错误代码,则根据该响应,您必须提示另一个登录屏幕供用户提供本地凭据。然后请求将发送到我们之前实现的 Login
端点,其中传递的凭据将根据数据库进行验证,如果凭据有效,SPA 将接收 JWT 不记名令牌。
所以,最后,我选择将我的 Asp.Net Core 变成一个 IdentityServer,这样 SPA 就只请求该服务器,而不知道我的远程 IdentityServer,并将后者添加为外部提供者(与 AddOpenIDConnect 服务集合扩展方法)。
在我的 Asp.Net 核心服务器的登录操作中,我检查远程 IdentityServer 是否可用。
如果是,我会用 'idsrv.external' 方案挑战它,从而无缝地将用户重定向到外部 IdentityServer。
如果不是,我将按照 IdentityServer4 文档中的描述继续正常的登录过程。
这样,我的 SPA 只需要知道我的服务器的 url,而后者无缝地提供令牌,它应该自己生成它还是将它委托给外部 IdentityServer x)