我有一个连接到数据库的 web api,它使用 OpenIddict 和密码流(资源所有者密码凭据授予)提供访问令牌:
services.AddOpenIddict<TestUser, IdentityRole<Guid>, CompleteContext, Guid>()
.EnableTokenEndpoint("/connect/token")
.AllowPasswordFlow()
.AllowRefreshTokenFlow()
.DisableHttpsRequirement()
.AddEphemeralSigningKey();
Web api 具有受保护的操作,只能使用有效的访问令牌调用。这工作正常。
我有一个网络应用程序,它应该使用相同的访问令牌进行授权。用户输入他的凭据,Web 应用程序将它们发送到 API 以获取访问令牌。我认为,网络应用程序可以使用此访问令牌进行授权,但我现在不知道如何在 asp.net 核心中设置中间件。
背景:web 应用程序和 web api 应该在不同的服务器上运行,稍后我想创建使用 web api 访问数据的移动应用程序。这就是我想使用令牌的原因。我希望 web api 成为唯一可以访问数据库的项目。
编辑更多背景:该网络应用程序是一个 mvc 6 应用程序,具有标准用户功能:注册、登录、注销、电子邮件确认以及与用户生成内容的一些交互。所有这些内容都应该存储在数据库中。因为我以后可能需要添加一个移动应用程序,所以我想要一个单独的 web api 来存储和访问数据库中的数据。Web api 的唯一目的是处理数据访问。mvc web 应用程序应该与 web api 通信以获取和存储数据。用户必须经过身份验证才能使用 Web 应用程序,并且 Web 应用程序必须经过身份验证才能访问 Web API。没有第三方应用,这让我想到了密码流程。我想,用户在 Web 应用程序中输入他的凭据以从 Web api 获取访问令牌。我的计划是,访问令牌存储在 cookie 中,以便 web 应用程序可以在需要时使用它来访问 web api。我也可以使用此访问令牌在 Web 应用程序上进行身份验证和授权吗?也许像创建一个自定义SignInManager
和UserManager
,或授予 Web 应用程序数据库访问权限并使用标准 asp.net 身份。还是有其他更好的解决方案?