C# 如何使用本地身份帐户启用OpenID连接流?

C# 如何使用本地身份帐户启用OpenID连接流?,c#,asp.net-core,identityserver4,openid-connect,C#,Asp.net Core,Identityserver4,Openid Connect,我正在开发一个由ASP.NET核心服务器、Angular SPA和远程OpenID连接服务器(IdentityServer4)组成的新解决方案。我希望允许用户在无法访问远程OpenID connect服务器时(例如,当internet连接丢失时)使用其本地标识用户帐户进行连接 默认情况下,当使用Asp.Net核心标识时,本地帐户依赖cookie,这显然是不好的,因为我希望Angular SPA只使用OpenID Connect,而不是开发多个提供者/流 是否可以在我的ASP.NET核心服务器应用

我正在开发一个由ASP.NET核心服务器、Angular SPA和远程OpenID连接服务器(IdentityServer4)组成的新解决方案。我希望允许用户在无法访问远程OpenID connect服务器时(例如,当internet连接丢失时)使用其本地标识用户帐户进行连接

默认情况下,当使用Asp.Net核心标识时,本地帐户依赖cookie,这显然是不好的,因为我希望Angular SPA只使用OpenID Connect,而不是开发多个提供者/流

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


提前感谢

我将根据我对您的问题的理解撰写一份答案

首先在.Net核心应用程序中实现JWT承载身份验证。实现另一个端点,比如说
Login
,它接受用户名和密码。这些用户名和密码保存在本地数据库中<代码>登录的实现方式应确保在成功对数据库进行凭证验证后返回JWT承载令牌


现在,您的SPA应该首先将授权请求发送到Identity server。如果它成功了,那么就没有问题了。但若它是与不可用性相关的其他错误代码,那个么在响应时,您必须提示另一个登录屏幕,以便用户提供本地凭据。然后,一个请求将被发送到我们前面实现的
登录
端点,在该端点中,传递的凭据将根据数据库进行验证,如果凭据有效,SPA将接收JWT承载令牌

我将根据我对您的问题的理解撰写一份答案

首先在.Net核心应用程序中实现JWT承载身份验证。实现另一个端点,比如说
Login
,它接受用户名和密码。这些用户名和密码保存在本地数据库中<代码>登录的实现方式应确保在成功对数据库进行凭证验证后返回JWT承载令牌


现在,您的SPA应该首先将授权请求发送到Identity server。如果它成功了,那么就没有问题了。但若它是与不可用性相关的其他错误代码,那个么在响应时,您必须提示另一个登录屏幕,以便用户提供本地凭据。然后,一个请求将被发送到我们前面实现的
登录
端点,在该端点中,传递的凭据将根据数据库进行验证,如果凭据有效,SPA将接收JWT承载令牌

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

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

如果是,我将使用“idsrv.external”方案对其进行质询,从而似乎不会将用户重定向到外部IdentityServer

如果不是,我将按照IdentityServer4文档中所述继续正常登录过程


这样,我的SPA只需要知道我的服务器的url,后者似乎不需要提供令牌,如果它自己生成令牌或将令牌委托给外部标识服务器x)

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

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

如果是,我将使用“idsrv.external”方案对其进行质询,从而似乎不会将用户重定向到外部IdentityServer

如果不是,我将按照IdentityServer4文档中所述继续正常登录过程

这样,我的SPA只需要知道我的服务器的url,如果它自己生成令牌或将令牌委托给外部标识服务器x,则后者似乎不会提供令牌