REST API 使用 Active Directory 的授权方法
Authorization method for REST API utilising Active Directory
保护满足以下要求的 REST Web API 的最佳方法是什么。该系统有一个 Angular JS 前端,在 ASP.net.
中实现了 REST APIs
- 系统中有两个"roles",用户将拥有其中一个
角色。一个角色应该允许访问一些 APIs(称之为 "VIEW"),
另一个角色允许访问其他 APIs
- 所有用户都在 Active Directory 中,所以如果我有用户名,我可以检查他们的角色 - 一些客户端在 Windows 框中,其他在 Linux
- 我想保留会话,这样我就不必为每个 API 调用查找 AD
- 我想要单点登录。在 Windows 机器上,我不需要他们输入用户并通过,因为我已经可以使用 Windows 身份验证检索他们的用户名。
我相信 Oauth 是我最好的选择。
There are two "roles" in the system, users will have one of the roles.
One role should allows access to some APIs (call it "VIEW"), the other
role allows access to other APIs
- 对于基于角色的身份验证,您可以使用 [Authorize("Role" = "Manager")]。令牌将由身份服务器提供,并将包含作为角色的声明。
All users are in Active Directory, so if I have a username, I can
check what role they are in- Some clients are on Windows boxes, the
others are on Linux
- 如果您有 ADFS,那么您可以拥有一个信任 ADFS 的身份服务器。 ADFS 将提供一个令牌,该令牌将具有角色声明,您的身份服务器将进行声明转换,并将 return 相同的角色声明返回给 angular 应用程序。
I would like to persist the session so I don't have to look up AD for
every API call
- 为此,在请求令牌时,您可以请求离线范围,这样身份服务器将提供
Refresh Token
和 Access Token
,这样您就不需要一次又一次地请求 AD。
I would like single sign on. On the Windows machines, I don't require
them to enter user and pass as I already can retrieve their username
using Windows Authentication.
- 对于这个,您可以让您的身份服务器信任 WSFederation 以进行 windows 身份验证。
因此,基本上您需要设置身份服务器来为您提供令牌,REST API 将使用该令牌来验证对 return 返回给用户的正确信息的声明。
我不确定您的期望是什么。不管怎样,首先我要用要求重新表述你的问题:
- 您的帐户和角色在活动目录中
- 您想根据活动目录组管理角色
- 您希望任何系统(windows、linux、mac、移动...)的任何人使用相同的身份验证连接到您的应用程序
- 您想避免您的广告不断被击中(例如,不是在任何呼叫中)
- 如果用户在使用身份验证系统的应用程序上连接,则他不必在使用相同身份验证系统的另一个应用程序上再次这样做
如果这些要求是您的。我相信唯一标准(和干净)的解决方案是使用 OAuth。我不会详细描述 OAuth,但此身份验证协议是网上最标准的协议(facebook、google、twitter...)。当然,由于您不想在业务应用程序中使用 facebook、google 或 twitter 帐户,而是使用活动目录帐户,因此您必须 install/setup/develop 使用活动目录帐户的 OAuth 身份提供者服务器。您的选择将取决于您对 ADFS 协议及其不同流程(代码、隐式、断言)的了解程度。您有两种解决方案:
- 使用ADFS:安装ADFS;它提供了一个 OAuth 门户,可以与 asp.net mvc 开箱即用。这使用 OAuth 的代码流,这是 ADFS 支持的唯一 OAuth 流。对于角色及其相关的 AD 组,您必须将角色声明与 AD 组进行映射。 (它在 adfs 的设置中,您会在网上找到很多教程)。您还会找到很多关于如何将 ADFS 与 asp.net mvc/asp.net webapi 一起使用的教程。我在这里提到 .net,但每种技术都有 OAuth 身份验证的实现(nodeJs/express、php、java...)。
- 使用thinktecture身份服务器(.net技术)。这将为以最少的努力实现自定义身份服务器提供所有基础:http://www.thinktecture.com/identityserver / https://github.com/IdentityServer/IdentityServer3。它包含一个将其帐户插入活动目录的插件。有了这个,您可以使用隐式和断言流。
- 使用 oauth2orize(对于 nodeJs):https://www.npmjs.com/package/oauth2orize。这将允许您在 nodeJs 中创建与 thinktecture 身份服务器相同的身份服务器。显然,您必须手动完成所有带有广告的接线。有了这个,您可以使用隐式流程(不确定断言流程)。
在应用程序端,大多数框架都可以使用 OAuth 与许多现有框架轻松进行身份验证。例如,即使你做一个单页应用程序,如果你使用angular,你可以使用adal.js或oidc.js来代替angular。正如我上面提到的,所有这些都由 asp.net mvc/webapi 开箱即用地负责,但我知道其他服务器技术也是如此。如果您有更多问题,请不要犹豫,因为我不确定您的期望是什么。
保护满足以下要求的 REST Web API 的最佳方法是什么。该系统有一个 Angular JS 前端,在 ASP.net.
中实现了 REST APIs- 系统中有两个"roles",用户将拥有其中一个 角色。一个角色应该允许访问一些 APIs(称之为 "VIEW"), 另一个角色允许访问其他 APIs
- 所有用户都在 Active Directory 中,所以如果我有用户名,我可以检查他们的角色 - 一些客户端在 Windows 框中,其他在 Linux
- 我想保留会话,这样我就不必为每个 API 调用查找 AD
- 我想要单点登录。在 Windows 机器上,我不需要他们输入用户并通过,因为我已经可以使用 Windows 身份验证检索他们的用户名。
我相信 Oauth 是我最好的选择。
There are two "roles" in the system, users will have one of the roles. One role should allows access to some APIs (call it "VIEW"), the other role allows access to other APIs
- 对于基于角色的身份验证,您可以使用 [Authorize("Role" = "Manager")]。令牌将由身份服务器提供,并将包含作为角色的声明。
All users are in Active Directory, so if I have a username, I can check what role they are in- Some clients are on Windows boxes, the others are on Linux
- 如果您有 ADFS,那么您可以拥有一个信任 ADFS 的身份服务器。 ADFS 将提供一个令牌,该令牌将具有角色声明,您的身份服务器将进行声明转换,并将 return 相同的角色声明返回给 angular 应用程序。
I would like to persist the session so I don't have to look up AD for every API call
- 为此,在请求令牌时,您可以请求离线范围,这样身份服务器将提供
Refresh Token
和Access Token
,这样您就不需要一次又一次地请求 AD。
I would like single sign on. On the Windows machines, I don't require them to enter user and pass as I already can retrieve their username using Windows Authentication.
- 对于这个,您可以让您的身份服务器信任 WSFederation 以进行 windows 身份验证。
因此,基本上您需要设置身份服务器来为您提供令牌,REST API 将使用该令牌来验证对 return 返回给用户的正确信息的声明。
我不确定您的期望是什么。不管怎样,首先我要用要求重新表述你的问题:
- 您的帐户和角色在活动目录中
- 您想根据活动目录组管理角色
- 您希望任何系统(windows、linux、mac、移动...)的任何人使用相同的身份验证连接到您的应用程序
- 您想避免您的广告不断被击中(例如,不是在任何呼叫中)
- 如果用户在使用身份验证系统的应用程序上连接,则他不必在使用相同身份验证系统的另一个应用程序上再次这样做
如果这些要求是您的。我相信唯一标准(和干净)的解决方案是使用 OAuth。我不会详细描述 OAuth,但此身份验证协议是网上最标准的协议(facebook、google、twitter...)。当然,由于您不想在业务应用程序中使用 facebook、google 或 twitter 帐户,而是使用活动目录帐户,因此您必须 install/setup/develop 使用活动目录帐户的 OAuth 身份提供者服务器。您的选择将取决于您对 ADFS 协议及其不同流程(代码、隐式、断言)的了解程度。您有两种解决方案:
- 使用ADFS:安装ADFS;它提供了一个 OAuth 门户,可以与 asp.net mvc 开箱即用。这使用 OAuth 的代码流,这是 ADFS 支持的唯一 OAuth 流。对于角色及其相关的 AD 组,您必须将角色声明与 AD 组进行映射。 (它在 adfs 的设置中,您会在网上找到很多教程)。您还会找到很多关于如何将 ADFS 与 asp.net mvc/asp.net webapi 一起使用的教程。我在这里提到 .net,但每种技术都有 OAuth 身份验证的实现(nodeJs/express、php、java...)。
- 使用thinktecture身份服务器(.net技术)。这将为以最少的努力实现自定义身份服务器提供所有基础:http://www.thinktecture.com/identityserver / https://github.com/IdentityServer/IdentityServer3。它包含一个将其帐户插入活动目录的插件。有了这个,您可以使用隐式和断言流。
- 使用 oauth2orize(对于 nodeJs):https://www.npmjs.com/package/oauth2orize。这将允许您在 nodeJs 中创建与 thinktecture 身份服务器相同的身份服务器。显然,您必须手动完成所有带有广告的接线。有了这个,您可以使用隐式流程(不确定断言流程)。
在应用程序端,大多数框架都可以使用 OAuth 与许多现有框架轻松进行身份验证。例如,即使你做一个单页应用程序,如果你使用angular,你可以使用adal.js或oidc.js来代替angular。正如我上面提到的,所有这些都由 asp.net mvc/webapi 开箱即用地负责,但我知道其他服务器技术也是如此。如果您有更多问题,请不要犹豫,因为我不确定您的期望是什么。