我有一个我已经成功创建的.NET Core API,具有OAuth功能。
我使用grant_type=password
以及username
和password
来接收访问令牌,并使用请求Authorization
标头和AuthorizeAttribute
来调用我的控制器操作s在我的控制器操作上使用Policy
参数。一切都很好。
然而,有几种情况我不知道如何处理。例如:
有时我想要我的客户端应用程序(有多个)允许在用户尚未通过身份验证时访问API,但我不想让它向全世界开放。也就是说,对于某些端点,特定用户不需要进行身份验证,但我想限制访问。然后,用户可能会选择登录,根据他们的授权,允许他们访问更多API。
我应该如何处理?我应该在每次请求时传递client_id
和client_secret
吗?如果是这样,我如何在AuthorizeAttributes中处理这个问题?或者我应该使用client_id
和client_secret
以及空白username
和password
进行身份验证....然后当/如果用户实际使用所有4个参数登录时再次进行身份验证?
答案 0 :(得分:0)
如果您有最终用户,则可以使用资源所有者密码授予的组合 - 如果不是,则可以使用客户端凭据授予。
根据您的API网关,这会有所不同,但归结为以下几点:
例如,根据您使用的授权,您的API网关可以向后端添加不同的标头,然后您可以检查该标头以查看正在进行的呼叫类型。对于例如Mashape Kong,您将获得X-ConsumerId
,无论是CC和RO授权,还是RO授权,您还将获得X-Authenticated-UserId
(和X-Authenticated-Scope
,如果您工作有范围)。
如果您正在滚动自己的OAuth2实现(哼?),您只需要内省用于创建令牌(password
或client_credentials
)的授权类型的令牌以了解什么作为机器用户或代表最终用户的访问类型,您提供给应用程序。
希望可以提供帮助。