目录

简介

背景信息

先决条件

要求

使用的组件

配置

高级流概述

配置Azure AD for Integration

配置ISE进行集成

不同使用案例的ISE策略示例

验证

故障排除

REST身份验证服务的问题

REST ID身份验证问题

使用日志文件

简介

本文档介绍通过REST身份服务和资源所有者密码凭据实现的Cisco ISE 3.0与Azure AD的集成。

背景信息

本文档介绍如何配置身份服务引擎(ISE)3.0与通过具象状态传输(REST)身份(ID)服务在资源所有者密码凭证(ROPC)的帮助下实施的Microsoft(MS)Azure Active Directory(AD)的集成并对其进行故障排除。

先决条件

要求

Cisco 建议您具有以下主题的基础知识：

- ISE

- MS Azure广告

- 了解ROPC协议的实施及其限制；链路

使用的组件

本文档中的信息基于以下软件和硬件版本：

- 思科ISE版本3.0

- MS Azure广告

- WS-C3850-24P，带16.9.2

- 带9.10(1)的ASAv

- Windows 10.0.18363

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

配置

ISE REST ID功能基于ISE 3.0 - REST身份验证服务中引入的新服务。此服务负责通过开放式授权(OAuth)ROPC交换与Azure AD进行通信，以执行用户身份验证和组检索。 REST身份验证服务默认禁用，在管理员启用后，它将在部署中的所有ISE节点上运行。 由于在用户身份验证时与云进行REST身份验证服务通信，因此路径上的任何延迟都会给身份验证/授权流程带来额外的延迟。此延迟不在ISE控制范围之内，必须仔细规划和测试REST身份验证的任何实施，以避免影响其他ISE服务。

高级流概述

1. Azure云管理员创建新的应用程序（应用）注册。此应用的详细信息稍后将在ISE上使用，以便与Azure AD建立连接。

2. Azure云管理员必须使用以下设置配置应用：

- 创建客户端密码

- 启用ROPC

- 添加组领款申请

- 定义应用编程接口(API)权限

3. ISE管理员启用REST身份验证服务。在执行任何其他操作之前，必须先完成此操作。

4.将更改写入配置数据库并在整个ISE部署中复制。

5.在所有节点上启动REST身份验证服务。

6. ISE管理员使用步骤2中的详细信息配置REST ID存储。

7.将更改写入配置数据库并在整个ISE部署中复制。

8. ISE管理员创建新的身份库序列或修改已有的身份库序列并配置身份验证/授权策略。

9.将更改写入配置数据库并在整个ISE部署中复制。

10.终端发起身份验证。根据ROPC协议规范，必须通过加密HTTP连接以明文形式向Microsoft身份平台提供用户密码；因此，到目前为止，ISE支持的唯一可用身份验证选项为：

- 以密码身份验证协议(PAP)作为内部方法的可扩展身份验证协议 — 隧道传输层安全(EAP-TTLS)

- 使用PAP的AnyConnect SSL VPN身份验证

11.通过Radius与ISE策略服务节点(PSN)交换。

12. Process Runtime(PrRT)通过内部API向REST ID服务发送包含用户详细信息（用户名/密码）的请求。

13. REST ID服务将OAuth ROPC请求发送到Azure AD over HyperText Transfer Protocol Secure(HTTPS)。

14. Azure AD执行用户身份验证并获取用户组。

15.向ISE返回身份验证/授权结果。

在点15之后，身份验证结果和获取的组返回到PrRT，其中涉及策略评估流程并分配最终身份验证/授权结果。Access-Accept with attributes from the authorization profile或Access-Reject returned to Network Access Device(NAD)。

配置Azure AD for Integration

1.查找AppRegistration Service（如图所示）。

图 2.

a.在全局搜索栏中键入AppRegistration。

b.单击App registration服务。

2.创建新的应用注册。

图 3.

3.注册新应用。

图 4.

a.定义应用的名称。

b.定义哪些帐户可以使用新应用程序。

c.按“注册”按钮。

4.导航到证书和密钥。

图 5.

5.创建  New client secret  如图所示.

图 6.

6.配置  client secret如图所示.

图 7.

a.定义新加密的说明。

b.选择到期期间。

c.单击Add 按钮。

7.复制并保存加密值（稍后在集成配置时需要在ISE上使用）。

图 8.

8.导航回到 Overview  选项卡以复制 App ID  和.

图 9

9.为应用启用ROPC。

图 10.

a.导航至Authentication 选项卡。

b.找到“高级设置”部分。

c.选择Yes for — 将应用程序视为公共客户端。

d.单击Save 按钮。

10. Add group claims  到应用。

图 11.

a.导航到令牌配置。

b.继续按 — Add groups claim .

11.定义需要添加的组类型

图 12.

a.选择 — 所有组。

b.单击Add 按钮。

12.添加 API permissions .

图 13.

a.导航至 API permissions .

b.点击 Add permission .

13.添加 Microsoft Graph  权限。

图 14.

14.添加 Application permissions .

图 15.

15.添加 Group.Read.All  权限。

图 16.

a.查找API类型 — 组。

b.选择 Group.Read.All .

c.单击 Add permissions  按钮。

注意：借助不同的API权限，可以通过多种方式从Azure AD获取用户组数据。本示例中介绍的方法在Cisco TAC实验中证明是成功的。使用其他API权限，以备您的Azure AD管理员建议使用。

16. Grant admin consent  用于API权限。

图 17.

17.确认管理员的授权同意。

图 18.

此时，您可以考虑在Azure AD端完全配置集成。

配置ISE进行集成

1.导航至“身份管理”设置。

图 19.

导航至 Administration > Identity Management> Settings .

2.启用REST ID服务（默认情况下禁用）。

图 20.

导航至REST ID Store Settings 并更改REST ID存储设置的状态，以便Enable，然后 Submit  您的更改。

3.创建REST ID存储。

图 21.

切换到 External Identity Sources  选项卡，点击 REST (ROPC)  子选项卡，然后单击Add。

4.配置REST ID存储。

图 22.

a.定义ID存储名称。稍后配置授权策略时，可以在ISE词典列表中找到此名称。此外，此名称显示在身份验证策略设置中可用的ID存储列表中，以及身份存储序列配置中可用的ID存储列表中。

b.提供客户端ID（在Azure AD集成配置部分的步骤8中从Azure AD获取）。

c.提供客户端密码（在Azure AD集成配置部分的步骤7中从Azure AD获取）。

d.提供租户ID（取自Azure AD集成配置部分的步骤8.中的Azure AD）。

e.配置用户名Sufix — 默认情况下，ISE PSN使用最终用户提供的用户名，该用户名以sAMAccountName格式（短用户名，例如bob）提供；在这种情况下，Azure AD无法定位用户。 Username Sufix是添加到用户提供的用户名的值，以便将用户名设置为UPN格式。

注意:ROPC限于用户身份验证，因为它在身份验证期间依赖用户名属性。Azure AD中的设备对象没有用户名属性。

f.按测试连接以确认ISE可以使用提供的应用详细信息与Azure AD建立连接。

g.按“加载组”以将Azure AD中的可用组添加到REST ID存储中。此处的示例显示了管理员体验的样子。

注意：请注意缺陷Cisco Bug ID CSCvx00345，因为它会导致组无法加载。该缺陷在ISE 3.0补丁2中修复。

图 23.

h.提交更改。

5.在此步骤中，考虑创建新的身份库序列，其中包括新创建的REST ID库。

6.当REST ID存储或包含其的Identity Store序列分配给身份验证策略时，如图所示，将Process Failure的默认操作从DROP更改为REJECT。

图 24.

a.找到使用REST ID存储的身份验证策略。

b.打开“选项”下拉列表。

c. Process Failed的更改默认操作从DROP更改为REJECT。

当REST ID存储中发生以下特定故障时，为了避免在NAD端上标记为停用的PSN，需要执行此操作：

- 用户不是Azure AD中任何组的成员。

- 必须更改用户密码。

7.将REST ID存储词典添加到授权策略。

图 25.

a.打开“所有字典”下拉列表。

b.使用与REST ID存储相同的方式找到名为的词典。

8.添加外部身份组（自ISE 3.0起，REST ID存储词典中唯一可用的属性是外部组）。

图 26.

不同使用案例的ISE策略示例

在Dot1x身份验证的情况下，来自网络访问字典的EAP隧道条件可用于匹配EAP-TTLS尝试，如图所示。

图 27.

a.定义与EAP-TTLS相等的EAP隧道以匹配需要转发到REST ID存储的尝试。

b.直接在REST ID存储中选择，或者在“使用”列中包含身份存储序列。

在单个授权策略内部，来自Azure AD的外部组可以与EAP隧道类型一起使用：

图 28.

对于基于VPN的流量，您可以使用隧道组名称作为区分因素：

验证策略:

授权策略:

图 29.

验证

使用本部分可确认配置能否正常运行。

1.确认REST身份验证服务在ISE节点上运行。

要检查此项，需要在目标ISE节点的Secure Shell(SSH)外壳中执行show application status ise命令：

skuchere-ise30-1/admin# show application status ise

ISE PROCESS NAME STATE PROCESS ID

--------------------------------------------------------------------

Database Listener running 101790

Database Server running 92 PROCESSES

Application Server running 39355

Profiler Database running 107909

ISE Indexing Engine running 115132

AD Connector running 116376

M&T Session Database running 107694

M&T Log Processor running 112553

Certificate Authority Service running 116226

EST Service running 119875

SXP Engine Service disabled

Docker Daemon running 104217

TC-NAC Service disabled

pxGrid Infrastructure Service disabled

pxGrid Publisher Subscriber Service disabled

pxGrid Connection Manager disabled

pxGrid Controller disabled

PassiveID WMI Service disabled

PassiveID Syslog Service disabled

PassiveID API Service disabled

PassiveID Agent Service disabled

PassiveID Endpoint Service disabled

PassiveID SPAN Service disabled

DHCP Server (dhcpd) disabled

DNS Server (named) disabled

ISE Messaging Service running 104876

ISE API Gateway Database Service running 106853

ISE API Gateway Service running 110426

Segmentation Policy Service disabled

REST Auth Service running 63052

SSE Connector disabled

2.验证身份验证时是否使用了REST ID存储（请检查详细身份验证报告的步骤。部分）。

a. PSN使用选定的REST ID存储启动纯文本身份验证。

b.与Azure云建立的连接。

c.实际身份验证步骤 — 注意此处显示的延迟值。如果所有使用安全云的身份验证都遇到严重延迟，这会影响其他ISE流，因此整个ISE部署变得不稳定。

d.确认身份验证成功。

e.确认答复中提供的群组数据。

f.使用用户组数据填充的会话上下文。有关ISE会话管理流程的更多详细信息，请考虑阅读本文的 — 链接。

3.确认已选择预期身份验证/授权策略（对于详细身份验证报告的此调查概述部分）。

图 30.

故障排除

本节提供可用于对配置进行故障排除的信息。

REST Auth服务问题

要排除REST身份验证服务的所有问题，您需要首先查看ADE.log文件。支持捆绑包位置-/support/adeos/ade

REST身份验证服务的搜索关键字是ROPC-control。

此示例显示REST身份验证服务如何启动：

2020-08-30T11:15:38.624197+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Starting

2020-08-30T11:15:39.217794+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] inside docker_image_exists

2020-08-30T11:15:39.290301+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Image exist with ID =

2020-08-30T11:15:39.291858+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Docker image doesn't exist

2020-08-30T11:15:39.293768+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Load docker image ROPC

2020-08-30T11:15:39.359490+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Error: No such image: ROPC

2020-08-30T11:15:42.789242+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Loaded image: ROPC:latest

2020-08-30T11:15:42.830411+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Docker image ROPC successfully loaded.

2020-08-30T11:15:42.832131+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Setting up REST Auth Service

2020-08-30T11:15:42.844051+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] inside docker_create_container

2020-08-30T11:15:53.479968+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Copying binaries to the docker container...

2020-08-30T11:15:55.325973+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Container run status false

2020-08-30T11:15:57.103245+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Container run status true

2020-08-30T11:15:57.105752+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Creating ROPC pid file

2020-08-30T11:15:57.278374+02:00 skuchere-ise30-1 admin: info:[application:operation:ROPC-control.sh] Container run status true

如果服务无法启动或意外中断，最好在出现问题的时间范围内查看ADE.log。

REST ID身份验证问题

如果使用REST ID存储时身份验证失败，则始终需要从详细的身份验证报告开始。在“其他属性”区域中，您可以看到包含由Azure云返回的错误的RestAuthErrorMsg部分：

图 31.

使用日志文件

在ISE 3.0中，由于REST ID功能的受控引进，默认情况下启用它的调试。所有与REST ID相关的日志都存储在ROPC文件中，可以通过CLI查看：

skuchere-ise30-1/admin# sh logging application | i ropc

755573 Oct 04 2020 09:10:29 ropc/ropc.log

skuchere-ise30-1/admin# sh logging application ropc/ropc.log

23:49:31.449 [http-nio-9601-exec-6] DEBUG c.c.i.r.c.ROPCController - Starting ROPC auth flow

23:49:31.788 [http-nio-9601-exec-6] DEBUG c.c.i.r.u.ScimUtility - Found user and pass in the SCIM filter

在安装了补丁的ISE 3.0上，请注意文件名是rest-id-store.log，而不是ropc.log。前面提供的搜索示例有效，因为文件夹名称未更改。

也可以从ISE支持捆绑包提取这些文件。

以下是几个显示不同工作和非工作场景的日志示例：

1. Azure Graph不受ISE节点信任时的证书错误。当组未加载到REST ID存储设置中时，可以看到此错误。

20:44:54.420 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - Start proxy load for URI 'https://graph.microsoft.com/v1.0/groups'

20:44:54.805 [http-nio-9601-exec-7] ERROR c.c.i.r.p.a.AzureIdentityProviderFacade - Couldn't fetch application groups, REST error

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found

at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)

at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)

at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)

at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)

at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)

此问题表明Microsoft graph API证书不受ISE信任。ISE 3.0.0.458在受信任存储中没有安装DigiCert全局根G2 CA。这记录在缺陷中

- Cisco Bug ID CSCvv80297要解决此问题，您需要在ISE受信任存储中安装DigiCert全局根G2 CA，并将其标记为思科服务的受信任项。

可以从此处下载证书 — https://www.digicert.com/kb/digicert-root-certificates.htm

2.错误的应用程序密钥。

10:57:53.200 [http-nio-9601-exec-1] DEBUG c.c.i.r.e.c.CertificateCache - SSLContext initialized with trust managers

10:57:54.205 [http-nio-9601-exec-1] ERROR c.c.i.r.u.RestUtility - Error response in 'POST' request. Status - '401'. Error - '{"error":"invalid_client","error_description":"AADSTS7000215: Invalid client secret is provided.\r\nTrace ID: 99cc29f7-502a-4aaa-b2cf-1daeb071b900\r\nCorrelation ID: a697714b-5ab2-4bd1-8896-f9ad40d625e5\r\nTimestamp: 2020-09-29 09:01:36Z","error_codes":[7000215],"timestamp":"2020-09-29 09:01:36Z","trace_id":"99cc29f7-502a-4aaa-b2cf-1daeb071b900","correlation_id":"a697714b-5ab2-4bd1-8896-f9ad40d625e5","error_uri":"https://login.microsoftonline.com/error?code=7000215"}'

10:57:54.206 [http-nio-9601-exec-1] ERROR c.c.i.r.c.ROPCController - Request related Error

com.cisco.ise.ROPC.entities.exceptions.InvalidApplicationAuthException: AADSTS7000215: Invalid client secret is provided.

Trace ID: 99cc29f7-502a-4aaa-b2cf-1daeb071b900

Correlation ID: a697714b-5ab2-4bd1-8896-f9ad40d625e5

Timestamp: 2020-09-29 09:01:36Z - Error Codes: [7000215]

at com.cisco.ise.ROPC.providers.azure.AzureIdentityProviderFacade.authenticateApplication(AzureIdentityProviderFacade.java:117)

3.错误的应用ID。

21:34:36.090 [http-nio-9601-exec-4] DEBUG c.c.i.r.e.c.CertificateCache - SSLContext initialized with trust managers

21:34:36.878 [http-nio-9601-exec-4] ERROR c.c.i.r.u.RestUtility - Error response in 'POST' request. Status - '400'. Error - '{"error":"unauthorized_client","error_description":"AADSTS700016: Application with identifier '825aab1f-be45-4d53-92fe-bb756' was not found in the directory '83cc4b2c-c608-4563-b6bd-dc8e83977ff6'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You have sent your authentication request to the wrong tenant.\r\nTrace ID: 6dbd0fdd-0128-4ea8-b06a-5e78f37c0100\r\nCorrelation ID: eced0c34-fcc1-40b9-b033-70e5abe75985\r\nTimestamp: 2020-08-31 19:38:34Z","error_codes":[700016],"timestamp":"2020-08-31 19:38:34Z","trace_id":"6dbd0fdd-0128-4ea8-b06a-5e78f37c0100","correlation_id":"eced0c34-fcc1-40b9-b033-70e5abe75985","error_uri":"https://login.microsoftonline.com/error?code=700016"}'

21:34:36.879 [http-nio-9601-exec-4] ERROR c.c.i.r.c.ROPCController - Request related Error

com.cisco.ise.ROPC.entities.exceptions.InvalidApplicationAuthException: AADSTS700016: Application with identifier '825aab1f-be45-4d53-92fe-bb756' was not found in the directory '83cc4b2c-c608-4563-b6bd-dc8e83977ff6'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You have sent your authentication request to the wrong tenant.

Trace ID: 6dbd0fdd-0128-4ea8-b06a-5e78f37c0100

Correlation ID: eced0c34-fcc1-40b9-b033-70e5abe75985

Timestamp: 2020-08-31 19:38:34Z - Error Codes: [700016]

4.未找到用户。

10:43:01.351 [http-nio-9601-exec-2] ERROR c.c.i.r.u.RestUtility - Error response in 'POST' request. Status - '400'. Error - '{"error":"invalid_grant","error_description":"AADSTS50034: The user account bob does not exist in the 83cc4b2c-c608-4563-b6bd-dc8e83977ff6 directory. To sign into this application, the account must be added to the directory.\r\nTrace ID: 9417a19e-66f8-4887-ab7a-a9ee268b1a00\r\nCorrelation ID: df3722ff-cd29-4ea2-98fc-fff0117a8db9\r\nTimestamp: 2020-08-31 08:46:57Z","error_codes":[50034],"timestamp":"2020-08-31 08:46:57Z","trace_id":"9417a19e-66f8-4887-ab7a-a9ee268b1a00","correlation_id":"df3722ff-cd29-4ea2-98fc-fff0117a8db9","error_uri":"https://login.microsoftonline.com/error?code=50034"}'

10:43:01.352 [http-nio-9601-exec-2] ERROR c.c.i.r.c.ROPCController - Request related Error

com.cisco.ise.ROPC.entities.exceptions.ROPCResponseErrorException: {"error":"invalid_grant","error_description":"AADSTS50034: The user account bob does not exist in the 83cc4b2c-c608-4563-b6bd-dc8e83977ff6 directory. To sign into this application, the account must be added to the directory.\r\nTrace ID: 9417a19e-66f8-4887-ab7a-a9ee268b1a00\r\nCorrelation ID: df3722ff-cd29-4ea2-98fc-fff0117a8db9\r\nTimestamp: 2020-08-31 08:46:57Z","error_codes":[50034],"timestamp":"2020-08-31 08:46:57Z","trace_id":"9417a19e-66f8-4887-ab7a-a9ee268b1a00","correlation_id":"df3722ff-cd29-4ea2-98fc-fff0117a8db9","error_uri":"https://login.microsoftonline.com/error?code=50034"}

at com.cisco.ise.ROPC.providers.azure.AzureIdentityProviderFacade.authenticateUser(AzureIdentityProviderFacade.java:87)

at com.cisco.ise.ROPC.providers.azure.AzureROPCFlow.authenticateUser(AzureROPCFlow.java:100)

at com.cisco.ise.ROPC.providers.azure.AzureROPCFlow.doEntireFlow(AzureROPCFlow.java:69)

at com.cisco.ise.ROPC.controllers.ROPCController.ROPCAuthFlow(ROPCController.java:168)

at com.cisco.ise.ROPC.controllers.ROPCController.get(ROPCController.java:85)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

5.用户密码已过期 — 通常可以为新创建的用户发生，因为Azure管理员定义的密码需要在登录到Office365时更改。

10:50:55.096 [http-nio-9601-exec-4] ERROR c.c.i.r.u.RestUtility - Error response in 'POST' request. Status - '401'. Error - '{"error":"invalid_grant","error_description":"AADSTS50055: The password is expired.\r\nTrace ID: 776120b2-9687-4f88-bf93-822a4d019c00\r\nCorrelation ID: 5defbdc6-3a7f-425f-91e9-ba3c10fcc410\r\nTimestamp: 2020-08-31 08:54:51Z","error_codes":[50055],"timestamp":"2020-08-31 08:54:51Z","trace_id":"776120b2-9687-4f88-bf93-822a4d019c00","correlation_id":"5defbdc6-3a7f-425f-91e9-ba3c10fcc410","error_uri":"https://login.microsoftonline.com/error?code=50055","suberror":"user_password_expired"}'

10:50:55.097 [http-nio-9601-exec-4] ERROR c.c.i.r.c.ROPCController - Request related Error

com.cisco.ise.ROPC.entities.exceptions.ROPCResponseErrorException: {"error":"invalid_grant","error_description":"AADSTS50055: The password is expired.\r\nTrace ID: 776120b2-9687-4f88-bf93-822a4d019c00\r\nCorrelation ID: 5defbdc6-3a7f-425f-91e9-ba3c10fcc410\r\nTimestamp: 2020-08-31 08:54:51Z","error_codes":[50055],"timestamp":"2020-08-31 08:54:51Z","trace_id":"776120b2-9687-4f88-bf93-822a4d019c00","correlation_id":"5defbdc6-3a7f-425f-91e9-ba3c10fcc410","error_uri":"https://login.microsoftonline.com/error?code=50055","suberror":"user_password_expired"}

at com.cisco.ise.ROPC.providers.azure.AzureIdentityProviderFacade.authenticateUser(AzureIdentityProviderFacade.java:87)

at com.cisco.ise.ROPC.providers.azure.AzureROPCFlow.authenticateUser(AzureROPCFlow.java:100)

at com.cisco.ise.ROPC.providers.azure.AzureROPCFlow.doEntireFlow(AzureROPCFlow.java:69)

at com.cisco.ise.ROPC.controllers.ROPCController.ROPCAuthFlow(ROPCController.java:168)

at com.cisco.ise.ROPC.controllers.ROPCController.get(ROPCController.java:85)

at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

6.由于API权限错误，无法加载组。

12:40:06.624 [http-nio-9601-exec-9] ERROR c.c.i.r.u.RestUtility - Error response in 'GET' request. Status - '403'. Error - '{

"error": {

"code": "Authorization_RequestDenied",

"message": "Insufficient privileges to complete the operation.",

"innerError": {

"date": "2020-08-30T10:43:59",

"request-id": "da458fa4-cc8a-4ae8-9720-b5370ad45297"

}

}

}'

7.当Azure端上不允许使用ROPC时，身份验证失败。

11:23:10.824 [http-nio-9601-exec-2] DEBUG c.c.i.r.e.c.CertificateCache - SSLContext initialized with trust managers

11:23:11.776 [http-nio-9601-exec-2] ERROR c.c.i.r.u.RestUtility - Error response in 'POST' request. Status - '401'. Error - '{"error":"invalid_client","error_description":"AADSTS7000218: The request body must contain the parameter: 'client_assertion' or 'client_secret'.\r\nTrace ID: 856d1ced-06c3-4446-a856-813789579b00\r\nCorrelation ID: b0a9cb82-4f37-46b3-abf5-361d8ce34094\r\nTimestamp: 2020-08-31 09:27:08Z","error_codes":[7000218],"timestamp":"2020-08-31 09:27:08Z","trace_id":"856d1ced-06c3-4446-a856-813789579b00","correlation_id":"b0a9cb82-4f37-46b3-abf5-361d8ce34094","error_uri":"https://login.microsoftonline.com/error?code=7000218"}'

11:23:11.777 [http-nio-9601-exec-2] ERROR c.c.i.r.c.ROPCController - Request related Error

com.cisco.ise.ROPC.entities.exceptions.ROPCResponseErrorException: {"error":"invalid_client","error_description":"AADSTS7000218: The request body must contain the parameter: 'client_assertion' or 'client_secret'.\r\nTrace ID: 856d1ced-06c3-4446-a856-813789579b00\r\nCorrelation ID: b0a9cb82-4f37-46b3-abf5-361d8ce34094\r\nTimestamp: 2020-08-31 09:27:08Z","error_codes":[7000218],"timestamp":"2020-08-31 09:27:08Z","trace_id":"856d1ced-06c3-4446-a856-813789579b00","correlation_id":"b0a9cb82-4f37-46b3-abf5-361d8ce34094","error_uri":"https://login.microsoftonline.com/error?code=7000218"}

at com.cisco.ise.ROPC.providers.azure.AzureIdentityProviderFacade.authenticateUser(AzureIdentityProviderFacade.java:87)

at com.cisco.ise.ROPC.providers.azure.AzureROPCFlow.authenticateUser(AzureROPCFlow.java:100)

at com.cisco.ise.ROPC.providers.azure.AzureROPCFlow.doEntireFlow(AzureROPCFlow.java:69)

at com.cisco.ise.ROPC.controllers.ROPCController.ROPCAuthFlow(ROPCController.java:168)

at com.cisco.ise.ROPC.controllers.ROPCController.get(ROPCController.java:85)

at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

8.身份验证失败，因为用户不属于Azure端上的任何组。

21:54:55.976 [http-nio-9601-exec-5] DEBUG c.c.i.r.e.c.CertificateCache - SSLContext initialized with trust managers

21:54:57.312 [http-nio-9601-exec-5] ERROR c.c.i.r.p.a.AzureROPCFlow - Missing claims in the id token: "name" or "groups"

21:54:57.313 [http-nio-9601-exec-5] ERROR c.c.i.r.c.ROPCController - Server Error

com.cisco.ise.ROPC.entities.exceptions.JsonParseException: Json exception: Missing claims in the id token: "name" or "groups"

at com.cisco.ise.ROPC.providers.azure.AzureROPCFlow.validateIdTokenPayload(AzureROPCFlow.java:93)

9.成功的用户身份验证和组检索。

11:46:03.035 [http-nio-9601-exec-7] DEBUG c.c.i.r.c.ROPCController - Starting ROPC auth flow

11:46:03.037 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.ScimUtility - Found user and pass in the SCIM filter

11:46:03.037 [http-nio-9601-exec-7] DEBUG c.c.i.r.c.ROPCController - Getting the right ROPC handler for the request IDPType AZURE

11:46:03.037 [http-nio-9601-exec-7] DEBUG c.c.i.r.c.ROPCController - Getting user groups from handler

11:46:03.038 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - Start building http client

11:46:03.039 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - Start proxy load for URI 'https://login.microsoftonline.com/83cc4b2c-c608-4563-b6bd-dc8e83977ff6/oauth2/v2.0/token'

11:46:03.039 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - Start check if host is bypass

11:46:03.039 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - Iterating bypass hosts '192.168.1.10,10.201.228.98,10.62.145.72,172.16.201.204,172.16.201.203' to find host 'login.microsoftonline.com'

11:46:03.040 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - Proxy server found with address '192.168.255.40' and port '8080', load to httpclient

11:46:03.040 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - Start adding proxy credentials to builder

11:46:03.040 [http-nio-9601-exec-7] DEBUG c.c.i.r.u.HttpClientWrapper - No credentials found for proxy

11:46:03.040 [http-nio-9601-exec-7] DEBUG c.c.i.r.e.c.CertificateCache - Created SSLContext with TLSv1.2 algorithm

11:46:03.041 [http-nio-9601-exec-7] DEBUG c.c.i.r.e.c.CertificateCache - SSLContext initialized with trust managers

11:46:04.160 [http-nio-9601-exec-7] DEBUG c.c.i.r.c.ROPCController - The ROPCHandlerResponse is: {

"schemas" : [ "urn:ietf:params:scim:schemas:core:2.0:User" ],

"userName" : "username",

"name" : {

"formatted" : "bob"

},

"displayName" : "bob",

"groups" : [ {

"value" : "17db2c79-fb87-4027-ae13-88eb5467f25b"

} ],

"roles" : [ ]

}