Mat*_*ler 6 azure oauth-2.0 owin asp.net-web-api2 openid-connect
我试图从概念上和实际上理解如何使用Azure AD在我的web-api应用程序中使用openID-connect流执行oauth2.
重要的是,当向API发出请求时,我想知道谁发出了请求.
我目前的理解是: -
这对我来说是个黑暗的地方.
我究竟如何使用此令牌授权访问特定资源,确定谁正在访问资源,以及执行此操作的机制是什么?
我有点假设我需要重复使用令牌才能在Azure AD用户终端的呼叫 - 如果令牌确实有效,则AD端点将返回用户的详细信息 - 从而确定该令牌的一些手段是有效的,并提供有关用户身份的详细信息.授权访问资源可以通过Azure AD中的组成员身份来完成.
但......
我只能假设这是一个已解决的问题,并注意到按照这个例子使用OWIN中间件
https://github.com/AzureADSamples/WebApp-WebAPI-OpenIDConnect-DotNet
但我仍然不确定究竟发生了什么.
该服务使范围和权利要求书的记载,但我不明白的地方,这些都源于(我从客户端提供的令牌承担,但不知道).该服务必须在呼叫中接收身份信息.
这让我有两点意见,因为这是安全的 -
调用服务时提供的令牌需要在传输中保护(因此使用HTTPS) - 以防止MITM.
令牌需要签名一些 - 我猜通过使用客户端秘密或其他东西 - 来防止令牌中的信息被欺骗.
有人能帮助我清理这个混乱的混乱吗?
特别是 -
如何确定API调用者的身份 - 是通过客户端或服务器中的调用确定的身份?
如何根据用户角色限制对API的某些端点的访问?
通过构建可用的现有中间件和库,我该怎么做才能实现这一目标?
免责声明:这不是一个全面的答案.这是我的头脑.
OpenID Connect在OAuth之上提供身份层.在您的情况下,Active Directory 提供身份验证并发回access_token.访问令牌表示AD已经过身份验证的用户.如果您正在进行OpenID Connect,那么AD也会发送一个id_token,其中可能包含其他身份信息(例如生日,头像以及AD公开的任何其他信息).
OpenID Connect和Active Directory都与您的应用分配给用户的角色无关; 角色完全是你的应用程序的bailiwick.您可以像平常一样分配用户角色; 您将它们分配给nameid虽然而不是电子邮件地址或用户名.您的应用不再需要对用户进行身份验证,但确实需要为其分配角色nameid.
如何确定API调用者的身份 - 是通过客户端或服务器中的调用确定的身份?
身份嵌入在access_tokenAD包含在其响应中.此令牌nameid中包含您的应用可以与用户和角色关联的标记.这nameid类似于您的应用用于识别用户的电子邮件地址,用户名或其他唯一ID.
如何根据用户角色限制对API的某些端点的访问?
你选.当您的应用收到特定请求时access_token,该令牌将通过其与特定用户关联nameid,您可以为该用户分配任何角色和权限.基本上,将角色与a关联nameid.
通过构建可用的现有中间件和库,我该怎么做才能实现这一目标?
这里有一个未完成的演示,虽然它不使用Active Directory作为提供程序,而是使用内部提供程序.对于演示,用户名是shaun密码是Testing123!.源代码在这里.
这是另一个演示源的链接,但同样,它不使用Active Directory作为提供者,而是使用Twitter.
关于OAuth和OpenID Connect的好处是我们可以使用我们想要的任何身份提供程序,因此您可以调整演示以使用Active Directory.