当前位置: 首页 > 知识库问答 >
问题:

如何使用Azure AD(oauth2)和调用Devops REST API(由oauth2保护)保护Spring Boot应用程序

堵景天
2023-03-14

我们有一个应用程序,它使用Azure Spring Boot Active Directory starter“com.microsoft.Azure:Azure Active Directory Spring Boot starter”和Spring Security来保护对该应用程序的访问。这一切都很好。

这是按照以下说明完成的:

https://docs.microsoft.com/en-us/azure/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory

现在,我们希望按照以下说明代表登录用户调用DevOps REST API:

https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops公司

令我困惑的是,每组留档都指定了一种完全不同的注册应用程序的方式

第一个说:“从门户菜单中,单击应用注册,然后单击注册应用程序。”

第二个说“去https://app.vsaex.visualstudio.com/app/register注册你的应用”

如果我通过第二种方式注册,它不会显示在门户中的应用程序注册列表中。

所以目前,我已经注册了两个应用程序,一个在门户中,另一个在第二种方式中。

为了向应用程序注册用户,我在这里指定了为第二个应用程序定义的回调URL(请记住,第一个和第二个应用程序是同一个应用程序)。

https://app.vssps.visualstudio.com/oauth2/authorize
        ?client_id={app ID}
        &response_type=Assertion
        &state={state}
        &scope={scope}
        &redirect_uri={callback URL}

但是,由于我已经通过Spring Security/AD(第一个机制)登录到应用程序,我从上面的应用程序注册URL中得到了这个错误,大概是因为我是从第一个登录的:

AADSTS50011:请求中指定的回复URL与为应用程序配置的回复URL不匹配:idoffirstapplication

问题:

如何通过AD保护我的应用程序,该AD在引擎盖下使用Oaut2,并允许应用程序代表登录用户调用Devops API?

主要问题似乎是Azure有两组完全不同的endpoint,用于通过Azure登录和调用Devops REST API。例如,REST API Oauth2令牌endpoint是https://app.vssps.visualstudio.com/oauth2/token但广告是https://login.microsoftonline.com/${azure.activedirectory.tenant id}/oauth2/token

我可以只有一个应用程序并添加我需要的OAuth2范围(vso.release_execute)并添加一个额外的redirect_uri来处理从调用https://app.vssps.visualstudio.com/oauth2/authorize返回的代码,然后拥有调用运营模式特定的令牌URL来获取刷新和访问令牌吗?

共有1个答案

欧阳勇
2023-03-14

这两个环节是不同的。第一个链接是使用Azure Active Directory的Spring Boot Starter保护Java web应用程序。第二个链接是授权使用OAuth 2.0访问Azure DevOps服务的REST API。

可以在应用程序中调用DevOps API的用户需要能够访问DevOps组织。您可以参考以下链接中的C示例:

https://github.com/microsoft/azure-devops-auth-samples/tree/master/OAuthWebSample

 类似资料:
  • 我正在开发配置了SSO/OAuth2安全性的Spring Boot应用程序。身份验证对我的rest控制器很有效,现在我需要用restendpoint保护我的Apache Camel路由。 据我所知,有几种方法可以做到这一点: 通过将身份验证处理器添加到我的路线 通过向我的路线添加策略(SpringSecurityAuthorizationPolicy) jettyendpoint的“按处理程序”选

  • 我有一个Spring boot API,我设法用oAuth2和Google来保护它。我有类似的东西:Rest,Spring自己的OAuth2服务器OAuth2提供商,如脸书,谷歌,雅虎 一切按预期运行。 我的问题是这样的:我如何知道限制某些用户(不是每个谷歌用户)的访问?对我来说这听起来像是授权部分。我不知道从哪里开始,因为在这方面我是个初学者。 感谢任何帮助或指点。

  • 我们正在构建一个REST资源服务器(一个Java示例应用程序),我们计划使用MITREID Connect项目提供的RFC7662定义的标识传播机制来保护它。我们测试了两种配置方法,XML设置,以及添加到resource server类中的基于注释的设置(参见下面附上的示例代码)。 我们的测试显示了Spring Security例程的成功初始化,但是我们没有成功地触发通过授权头的承载令牌通过。请求

  • 我有几个Azure Functions,我想使用Azure AD对其应用身份验证。在用户模拟身份验证方面,我已经成功做到了这一点。但不幸的是,我无法从尝试访问Azure Functions的守护程序应用程序中获得同样的工作。 我的守护程序应用程序在Azure AD中注册,并公开应用程序范围。基本上,我有其他构建为应用程序服务的API,可以从守护程序应用程序成功地进行身份验证。我为Azure功能应用

  • Spring.version:4.0.5.release Spring security Version:3.2.5.release Spring security oauth版本:2.0.2.release 球衣版本:1.18.1 我想使用Spring security的PreAuthorize注释来保护我的REST API,在这里我定义了被授权访问方法的角色: 当我使用角色为“role_adm