是我自己感到OAuth2和OpenIdConnect标准在“代理行为”功能上非常模糊。
我有以下情形,我将概述OAuth2利益相关者如下:
似乎像典型的授权代码流一样,周围有许多关于如何针对.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。
有人可以提出任何建议吗?我会很感激。