我有一个.NET Core Web API,它使用openiddict进行身份管理,该身份管理与SQL Server后端中的ASP.NET身份相关。许多应用程序可以通过订阅使用此API。我有以下要求。
要实现要求(1),我是否需要实现一个自定义授权功能来检查应用程序机密,还是应该在openiddict中启用另一个流程,以确保仅允许授权的应用程序访问API(无论授权属性)?在这种情况下,可能不会对用户进行身份验证,但是应用程序仍必须有权访问API的未授权端点。
要实现外部身份提供者的要求(2),是否可以为openiddict中注册的每个应用程序配置多个秘密,以允许其用户利用facebook或twitter进行身份验证?这很重要,因为在配置过程中,API将需要为每个可以访问API的应用程序(而不是API本身的clientID和密码)调用AddFacebook()。因为每个应用程序都有各自的facebookID和密码,所以我假设只有在openiddict可以通过AddFacebook()允许针对同一提供者类型注册多个ID和密码的情况下,此方法才起作用。
要实现要求(3),是否有一种内置的方法可以从openiddict获取调用应用程序的应用程序ID,就像用户是否已通过身份验证一样?
答案 0 :(得分:0)
要实现要求(1),我是否需要实现一个自定义授权功能来检查应用程序机密,还是应该在openiddict中启用另一个流程,以确保仅允许授权的应用程序访问API(无论授权属性)?
从RC3开始,默认情况下必须强制执行客户端标识:如果您不发送与Applications表中的条目相对应的client_id
,则OpenIddict本身将拒绝您的请求。在以前的版本中,您可以通过调用options.RequireClientIdentification()
(现在已退出)来选择此功能。
要实现外部身份提供者的要求(2),是否可以为openiddict中注册的每个应用程序配置多个秘密,以允许其用户利用facebook或twitter进行身份验证?这很重要,因为在配置过程中,API将需要为每个可以访问API的应用程序(而不是API本身的clientID和密码)调用AddFacebook()。因为每个应用程序都有各自的facebookID和密码,所以我假设只有在openiddict可以通过AddFacebook()允许针对同一提供者类型注册多个ID和密码的情况下,此方法才起作用。
OpenIddict与您使用的身份验证方案之间没有直接关系,因此不,您不能通过“ OpenIddict”“通过”配置多个Facebook凭据,因为两者是不相关的。
假设您出于多租户目的需要它,您可能需要阅读https://stackoverflow.com/a/49682427/542757,以了解如何覆盖ASP.NET Core的默认选项监视器,以便为身份验证处理程序(如OpenIddict,Facebook, Google和其他任何东西。
要实现要求(3),是否有一种内置的方法可以从openiddict获取调用应用程序的应用程序ID,就像用户是否已通过身份验证一样?
假设它是已知的(即,您没有在OpenIddict选项中明确地使客户端标识为可选),是的。例如,来自MVC控制器:
var result = await HttpContext.AuthenticateAsync(OpenIddictValidationDefaults.AuthenticationScheme);
Debug.Assert(result.Ticket != null, "The authentication ticket shouldn't be null.");
// The presenters list contains the authorized parties allowed to
// use the access token with your APIs. Usually, it contains a single value.
// Note: this extension requires a using for AspNet.Security.OpenIdConnect.Extensions.
var client = result.Ticket.GetPresenters().FirstOrDefault();