如何使用OAuth2 / OpenIdConnect来实现“代表”

时间:2018-11-29 16:44:09

标签: asp.net-mvc oauth-2.0 asp.net-core-webapi openid-connect

是我自己感到OAuth2和OpenIdConnect标准在“代理行为”功能上非常模糊。

我有以下情形,我将概述OAuth2利益相关者如下:

  • 资源所有者:具有用户名/密码的用户
  • 应用程序::MVC网站.NET Core v2.1
  • 资源服务器:WebAPI .NET Core v2.1
  • 授权服务器: Auth0
  • 用户代理: Web浏览器

似乎像典型的授权代码流一样,周围有许多关于如何针对.NET Core v2.0执行此操作的示例。 最棘手的地方是使用OpenIdConnectEvents.OnAuthorizationCodeReceived事件从代码中请求访问令牌。

假设我获得了访问令牌,它将给我确定该网站授权所需的任何声明,例如 呈现菜单选项,但前提是允许它们发出请求并使用Authorize属性保护端点。

我的问题是,我有一个API,可以为许多服务用户提供一些服务,其中之一就是我的MVC网站。 我想从我的MVC网站向此API提出请求。我可以通过传递我为MVC网站同意的客户端凭证的客户端凭证流来请求访问令牌。

但是,如果我希望该访问令牌反映我的用户(使用用户名/密码登录到我的MVC应用程序)的权限,我看不到如何执行此操作。我为他们准备了一个身份令牌(所以我知道他们就是他们所说的)。我有一个sub声明,可以唯一标识通过授权码流程获得的访问令牌中的身份。

为什么我不能向我的授权服务器发出客户端凭据“ / oauth / token” 请求,并传递sub并收到带有我的用户声明的API的访问令牌而不是我的应用程序。

感觉这是一种资源所有者密码凭证授予,但是我不想回到用户那里说:“您是否可以授予我与自己的内部API对话的权限,而您对此一无所知代表你”。我的意思是,当然是要与Google / Facebook等人交谈,但事实并非如此。

有一个azp授权方,也许可以用来存储我的MVC网站的标识符? sub是访问令牌中的用户吗?

目前,我唯一的解决方案是在访问令牌中将对API的授权声明重新提供给MVC App。似乎Auth Service需要知道我的MVC应用程序将调用什么API。

有人可以提出任何建议吗?我会很感激。

0 个答案:

没有答案