我正在设计一个包括身份验证和授权的微服务系统。我理解使用OpenID连接的身份验证部分,但我想知道授权如何进入图片。
让我们假设以下情况: 我们有一个用户坐在他的浏览器上,连接到一个Web应用程序("客户端"或"依赖方")。首先他登录到客户端,然后他想要(通过客户端)访问订单服务。但是,并非每个用户都可以查看订单,例如只允许销售部门的员工查看订单。
对于登录过程,用户,依赖方(RP)和身份提供商谈论OpenID连接。最后,RP有一个标识用户的id令牌。
现在,在访问订单服务时,某些组件必须检查用户权限。这个组件在哪里? RP在查询订单服务之前是否要求权利?订单服务是否询问用户权限?哪些信息/代币被发送到订单服务和"授权组件"?
我也看到了OpenID连接中的访问令牌,但据我所知,这些是OAuth2令牌,表明资源所有者已将其访问权限委派给客户端。但是,这不适用于我没有资源所有者的问题,而是要检查是否允许用户查看订单。 这可能不是OpenID连接的一部分,但对我来说这似乎是一个标准问题,虽然我找不到任何示例。
如果有帮助:我使用ASP .NET核心和IdentityServer4进行身份验证,而IdProvider是我系统的一部分(没有第三方登录)。如果其他协议更适合这个问题,我很高兴了解它们!
答案 0 :(得分:1)
你是对的。
"Authentication"(例如OpenID的IDServer4实现)是一种验证您是谁的机制。
"Authorization"确定授权用户可以授予的权限。他们是两件不同的事。
“授权”是“应用程序级别的东西”。您的 APP 决定:
a)存在哪些角色,
b)如何将经过身份验证的用户分配给角色
c)根据角色授予哪些特权。
对于“企业应用”,"Directory Service"(例如,MS Active Directory)通常用于将用户映射到角色。其他时候,应用程序自己进行映射。
换句话说,一旦建立了用户的身份,就有很多种不同的方式来分配“权限”。我能建议的最好的方法是考虑某种“基于角色的访问控制”(RBAC)。
例如:
答案 1 :(得分:1)
在openID connect(和OAuth)中,范围用于确定RP的“角色”(授权)。
举个例子: 应用程序可能有一些资源可供任何经过身份验证的资源所有者(也是客户)公开使用。
当资源所有者使用社交登录时,授权服务器可以确定该用户也是客户。授权政策规定任何客户都可以被授予“read_premium”OAuth范围。因此,授权服务器将授予特权范围“read_premium”。