java - 使用 OAuth2.0 或 Azure Active Directory 保护 REST API

标签 java azure oauth-2.0 active-directory jwt

我有一个 REST API,可以从 Web 应用程序中调用它来获取结果。我有一个客户端只要求我的 API,但我无法在没有任何安全性的情况下公开我的 API。显然我也必须在我的应用程序中使用它,到目前为止 API 并不安全,我希望我的客户端使用有效的凭据使用我的 API,无论是 OAuth 2.0、JWT、证书还是一些额外的机制。我怎样才能实现这个目标,任何使用 Azure 的 Java 工作示例都可以,并且它不应该妨碍我现有的 WebApp,因为它使用 API 来达到自己的目的。提前致谢。

最佳答案

我尝试这样做,甚至完成了任务,但最终发现它对我的情况没有提供太多值(value)。就我而言,API 是通过长时间运行的后台任务访问的,而人工登录是不切实际的。现在应用程序无法登录Azure,必须通过浏览器应用程序来完成,该浏览器应用程序通过各种可能的方式进行保护以防止自动登录。除此之外,Microsoft 针对此类任务的解决方案是 shared secret-protected token这本质上意味着应用程序和 Azure 共享一个 secret (由 Azure 生成的密码)。这与您存储和检查密码的情况没有太大区别。

除此之外,还有 Azure Active Directory 和 Azure Active Directory v2.0 的问题。这有点令人困惑,因为两种解决方案都基于 OAuth2.0 token ,但 Azure AD v2.0 确实是一个非常不同的野兽。首先,在撰写此答案时,Azure AD v2.0 token 无法解码,它们只能由 Microsoft 服务使用。因此,如果您想知道登录的用户是谁,您需要将 token 传递给 Graph API,并且假设您有登录的用户。对于 Azure AD, token 可以由您的应用程序解码和验证,see this demonstration application, how to do it

总而言之,我建议仅当您为其提供登录服务的应用程序是用户在登录后与之交互的面向用户的应用程序时,才使用 Azure token 保护您的 API。如果它是长时间运行的服务器类型任务,则使用 Azure AD 保护它是毫无意义的。

关于java - 使用 OAuth2.0 或 Azure Active Directory 保护 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43201584/

相关文章:

silverlight - 如何将浏览器内 silverlight 客户端连接到 ACS - Azure - WIF - Entity Framework (公共(public)和私有(private)数据库模型)

c# - Microsoft Graph API - 如何在没有授权码的情况下获取访问 token ?

javascript - nodejs http post请求抛出TypeError

java - 在线程中设置内容 View

java - 检测客户端已与jetty服务器断开连接(使用延续)

java - Java中 "private static final"是什么意思?

google-app-engine - 如何使用 Google API Explorer 通过 OAuth 测试我自己的 App Engine 端点?

java - MapStruct + Lombok 一起无法编译 : unknown property in result type

node.js - Azure Node.js Express应用程序scaffold.xml丢失

asp.net-mvc-4 - 部署在 Azure 中时在 EF 迁移中使用更新数据库