Spring Cloud Azure 参考文档
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Azure 参考文档相关的知识,希望对你有一定的参考价值。
12.1.4. 资源服务器访问其他资源服务器
系统示意图
在 Azure 中创建所需的资源
- 阅读有关向 Microsoft 标识平台注册应用程序的 MS 文档。
- 创建应用注册。得到,和。
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
添加所需的依赖项
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
添加必需属性
spring:
cloud:
azure:
active-directory:
profile:
tenant-id: $AZURE_TENANT_ID
credential:
client-id: $AZURE_CLIENT_ID
client-secret: $AZURE_CLIENT_SECRET
authorization-clients:
graph:
scopes:
- https://graph.microsoft.com/User.Read
在应用程序中使用 OAuth2AuthorizedClient
public class SampleController
@GetMapping("call-graph")
public String callGraph(@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graph)
return callMicrosoftGraphMeEndpoint(graph);
样品
示例项目:aad-resource-server-obo.
12.1.5. 一个应用程序中的 Web 应用程序和资源服务器
在 Azure 中创建所需的资源
- 阅读有关向 Microsoft 标识平台注册应用程序的 MS 文档。
- 创建应用注册。得到,和。
AZURE_TENANT_ID
AZURE_CLIENT_ID
AZURE_CLIENT_SECRET
添加所需的依赖项
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
添加必需属性
将属性设置为,并指定每个授权客户端的授权类型。spring.cloud.azure.active-directory.application-typeweb_application_and_resource_server
spring:
cloud:
azure:
active-directory:
profile:
tenant-id: $AZURE_TENANT_ID
credential:
client-id: $AZURE_CLIENT_ID
client-secret: $AZURE_CLIENT_SECRET
app-id-uri: $WEB_API_ID_URI
application-type: web_application_and_resource_server # This is required.
authorization-clients:
graph:
authorizationGrantType: authorization_code # This is required.
scopes:
- https://graph.microsoft.com/User.Read
- https://graph.microsoft.com/Directory.Read.All
定义安全性配置适配器
配置多个 HttpSecurity 实例,包含资源服务器和 Web 应用程序两种安全配置。AadWebApplicationAndResourceServerConfig
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadWebApplicationAndResourceServerConfig
@Order(1)
@Configuration
public static class ApiWebSecurityConfigurationAdapter extends AadResourceServerWebSecurityConfigurerAdapter
protected void configure(HttpSecurity http) throws Exception
super.configure(http);
// All the paths that match `/api/**`(configurable) work as `Resource Server`, other paths work as `Web application`.
http.antMatcher("/api/**")
.authorizeRequests().anyRequest().authenticated();
@Configuration
public static class htmlWebSecurityConfigurerAdapter extends AadWebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
super.configure(http);
// @formatter:off
http.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated();
// @formatter:on
12.1.6. 配置
Table 17. Configurable properties of spring-cloud-azure-starter-active-directory
名字 | 违约 | 描述 |
spring.cloud.azure.active-directory.app-id-uri | 可能在id_token的“aud”声明中使用的应用 ID URI。 | |
spring.cloud.azure.active-directory.application-type | AAD 应用程序的类型。 | |
spring.cloud.azure.active-directory.authenticate-additional-parameters | 向授权 URL 添加其他参数。 | |
spring.cloud.azure.active-directory.authorization-clients | OAuth2 授权客户端。 | |
spring.cloud.azure.active-directory.credential.client-id | 使用 Azure 执行服务主体身份验证时要使用的客户端 ID。 | |
spring.cloud.azure.active-directory.credential.client-secret | 使用 Azure 执行服务主体身份验证时要使用的客户端密码。 | |
spring.cloud.azure.active-directory.credential.client-certificate-path | 使用 Azure 执行服务主体身份验证时要使用的客户端密码。 | |
spring.cloud.azure.active-directory.credential.client-certificate-password | 证书文件的密码。 | |
spring.cloud.azure.active-directory.jwk-set-cache-lifespan | | 缓存的 JWK 集在过期之前的生存期,默认值为 5 分钟。 |
spring.cloud.azure.active-directory.jwk-set-cache-refresh-time | | 缓存的 JWK 集在过期之前的刷新时间,默认值为 5 分钟。 |
spring.cloud.azure.active-directory.jwt-connect-timeout | JWKSet 远程 URL 调用的连接超时。 | |
spring.cloud.azure.active-directory.jwt-read-timeout | 读取 JWKSet 远程 URL 调用的超时。 | |
spring.cloud.azure.active-directory.jwt-size-limit | JWKSet 远程 URL 调用的大小限制(以字节为单位)。 | |
spring.cloud.azure.active-directory.post-logout-redirect-uri | 注销后的重定向 URI。 | |
spring.cloud.azure.active-directory.profile.cloud-type | 要连接到的 Azure 云的名称。支持的类型包括:AZURE、AZURE_CHINA、AZURE_GERMANY、AZURE_US_GOVERNMENT、其他。 | |
spring.cloud.azure.active-directory.profile.environment | Azure Active Directory 终结点的属性。 | |
spring.cloud.azure.active-directory.profile.tenant-id | Azure 租户 ID。 | |
spring.cloud.azure.active-directory.redirect-uri-template | | 重定向终结点:由授权服务器用于通过资源所有者用户代理将包含授权凭据的响应返回给客户端。 |
spring.cloud.azure.active-directory.resource-server.claim-to-authority-prefix-map | 配置将用于生成授予权限的声明,以及授予权限的字符串值的前缀。默认值为:“scp”→“SCOPE_”、“角色”→“APPROLE_”。 | |
spring.cloud.azure.active-directory.resource-server.principal-claim-name | 配置在身份验证主体#getName 中返回的访问令牌中的声明。默认值为“sub”。 | |
spring.cloud.azure.active-directory.session-stateless | | 如果为 true,则激活无状态身份验证筛选器 AadAppRoleStatelessAuthenticationFilter。默认值为 false,这将激活 AadAuthenticationFilter。 |
spring.cloud.azure.active-directory.user-group.allowed-group-ids | 组 ID 可用于构造授予权限。 | |
spring.cloud.azure.active-directory.user-group.allowed-group-names | 组名可用于构造授予权限。 | |
spring.cloud.azure.active-directory.user-group.use-transitive-members | | 如果为“true”,则使用“v1.0/me/transitiveMemberOf”获取成员。否则,请使用“v1.0/me/memberOf”。 |
spring.cloud.azure.active-directory.user-name-attribute | 确定哪个声明是主体的名称。 |
下面是有关如何使用这些属性的一些示例:
应用程序类型
应用程序类型可以从依赖项中推断出来:spring-security-oauth2-client 或 spring-security-oauth2-resource-server。如果推断值不是所需的值,则可以指定应用程序类型。下表是关于有效值和推断值的表:
Table 18. Application type of spring-cloud-azure-starter-active-directory
具有依赖关系:spring-security-oauth2-client | 具有依赖关系:spring-security-oauth2-resource-server | 应用程序类型的有效值 | 推断值 |
是的 | 不 | | |
不 | 是的 | | |
是的 | 是的 | | |
12.2. Spring Security with Azure Active Directory B2C
Azure Active Directory (Azure AD) B2C 是一项标识管理服务,使你能够自定义和控制客户在使用应用程序时注册、登录和管理其配置文件的方式。Azure AD B2C 启用这些操作,同时保护客户的标识。
12.2.1. 依赖设置
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-active-directory-b2c</artifactId>
</dependency>
</dependencies>
12.2.2. 配置
Table 19. Configurable properties of spring-cloud-azure-starter-active-directory-b2c
名字 | 违约 | 描述 |
spring.cloud.azure.active-directory.b2c.app-id-uri | 应用ID URI,可用于令牌的“aud”声明。 | |
spring.cloud.azure.active-directory.b2c.authenticate-additional-parameters | 用于身份验证的其他参数。 | |
spring.cloud.azure.active-directory.b2c.authorization-clients | 指定客户端配置。 | |
spring.cloud.azure.active-directory.b2c.base-uri | AAD B2C 终结点基 URI。 | |
spring.cloud.azure.active-directory.b2c.credential | AAD B2C 凭据信息。 | |
spring.cloud.azure.active-directory.b2c.jwt-connect-timeout | JWKSet 远程 URL 调用的连接超时。 | |
spring.cloud.azure.active-directory.b2c.jwt-read-timeout | 读取 JWKSet 远程 URL 调用的超时。 | |
spring.cloud.azure.active-directory.b2c.jwt-size-limit | JWKSet 远程 URL 调用的大小限制(以字节为单位)。 | |
spring.cloud.azure.active-directory.b2c.login-flow | | 指定主登录流密钥。 |
spring.cloud.azure.active-directory.b2c.logout-success-url | | 注销后重定向网址。 |
spring.cloud.azure.active-directory.b2c.profile | AAD B2C 配置文件信息。 | |
spring.cloud.azure.active-directory.b2c.reply-url | | 获取授权码后回复网址。 |
spring.cloud.azure.active-directory.b2c.user-flows | 用户流。 | |
spring.cloud.azure.active-directory.b2c.user-name-attribute-name | 用户名属性名称。 |
有关完整配置,请查看附录页面。
12.2.3. 基本用法
A是允许用户使用 Azure AD 登录的任何基于 Web 的应用程序,而在验证从 Azure AD 获取access_token后,将接受或拒绝访问。我们将在本指南中介绍 4 种方案:web application
resource server
- 访问 Web 应用程序。
- 访问资源服务器的 Web 应用程序。
- 访问资源服务器。
- 访问其他资源服务器的资源服务器。
用法 1:访问 Web 应用程序
此方案使用OAuth 2.0 授权代码授予流使用 Azure AD B2C 用户登录用户。
- 步骤 1:从门户菜单中选择“Azure AD B2C”,单击“应用程序”,然后单击“添加”。
- 第 2 步:指定您的应用程序名称,我们称之为,添加回复 URL,将应用程序 ID记录为您的,然后单击保存。
webapp
localhost:8080/login/oauth2/code/
WEB_APP_AZURE_CLIENT_ID
- 步骤 3:从应用程序中选择“密钥”,单击“生成要生成的密钥”,然后单击“保存”。
WEB_APP_AZURE_CLIENT_SECRET
- 步骤 4:选择左侧的“用户流”,然后单击“新建用户流”。
- 步骤 5:选择“注册或登录”、“配置文件编辑”和“密码重置”以创建用户流 分别。指定用户流名称和用户属性和声明,单击“创建”。
- 步骤6:选择API权限>添加权限>微软API,选择微软图, 选择“委派权限”,选中“offline_access和openid权限”,选择“添加权限”以完成该过程。
- 步骤 7:授予对Graph权限的管理员同意。
- 第 8 步:在pom .xml中添加以下依赖项。
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>azure-spring-boot-starter-active-directory-b2c</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
</dependency>
</dependencies>
- 步骤 9:使用之前创建的值在application.yml中添加属性,例如:
spring:
cloud:
azure:
active-directory:
b2c:
authenticate-additional-parameters:
domain_hint: xxxxxxxxx # optional
login_hint: xxxxxxxxx # optional
prompt: [login,none,consent] # optional
base-uri: $BASE_URI
credential:
client-id: $WEBAPP_AZURE_CLIENT_ID
client-secret: $WEBAPP_AZURE_CLIENT_SECRET
login-flow: $LOGIN_USER_FLOW_KEY # default to sign-up-or-sign-in, will look up the user-flows map with provided key.
logout-success-url: $LOGOUT_SUCCESS_URL
user-flows:
$YOUR_USER_FLOW_KEY: $USER_FLOW_NAME
user-name-attribute-name: $USER_NAME_ATTRIBUTE_NAME
- 第 10 步:编写 Java 代码。
控制器代码可以参考以下内容:
@Controller
public class WebController
private void initializeModel(Model model, OAuth2AuthenticationToken token)
if (token != null)
final OAuth2User user = token.getPrincipal();
model.addAllAttributes(user.getAttributes());
model.addAttribute("grant_type", user.getAuthorities());
model.addAttribute("name", user.getName());
@GetMapping(value = "/", "/home" )
public String index(Model model, OAuth2AuthenticationToken token)
initializeModel(model, token);
return "home";
安全配置代码可以参考以下内容:
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter
private final AadB2cOidcLoginConfigurer configurer;
public WebSecurityConfiguration(AadB2cOidcLoginConfigurer configurer)
this.configurer == configurer;
@Override
protected void configure(HttpSecurity http) throws Exception
// @formatter:off
http.authorizeRequests()
.anyRequest().authenticated()
.and()
以上是关于Spring Cloud Azure 参考文档的主要内容,如果未能解决你的问题,请参考以下文章