【发布时间】:2015-11-28 17:24:01
【问题描述】:
我试图从概念上和实践上了解如何使用 Azure AD 在我的 web-api 应用程序中使用 openID-connect 流执行 oauth2。
重要的是,当向 API 发出请求时,我想知道谁发出了请求。
我目前的理解是:-
- 我的客户端会检测到用户未登录并重定向到登录。
- 用户将提供他们的凭据,并连同一个 oauth2 令牌一起被重定向回客户端。
- 此令牌将提供给任何请求的 web-api 端点。
这对我来说是模糊的。
我究竟如何使用此令牌来授权对特定资源的访问,确定谁在访问该资源,以及这样做的机制是什么?
我有点假设我需要重用令牌来调用 Azure AD 用户端点 - 如果令牌确实有效,AD 端点将返回用户详细信息 - 从而提供一些确定的方法令牌有效并提供有关用户身份的详细信息。可以通过 Azure AD 中的组成员身份来授权对资源的访问。
但是...
我只能假设这是一个已解决的问题,并且已经注意到按照此示例使用 OWIN 中间件
https://github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet
但我仍然不确定到底发生了什么。
该服务提到了范围和声明,但我不明白这些是从哪里派生的(我假设来自客户端提供的令牌,但不确定)。服务必须在调用中接收身份信息。
这让我想到两点,为了保证安全 -
在调用服务时提供的令牌需要在传输中得到保护(因此使用 HTTPS) - 以防止 MITM。
令牌需要以某种方式签名 - 我猜是通过使用客户端密码或其他方式 - 以防止令牌中的信息被欺骗。
谁能帮我收拾一下这个乱七八糟的烂摊子?
特别是-
API 调用者的身份是如何确定的 - 身份是通过客户端还是服务器中的调用确定的?
如何根据用户角色限制对 API 某些端点的访问?
如何通过构建现有可用的中间件和库来实现这一目标?
【问题讨论】:
-
我建议将其分解为几个 StackOverflow 问题。
标签: azure oauth-2.0 asp.net-web-api2 owin openid-connect