如何使用Azure AD用户账号密码免跳转获取令牌认证App Service?
实现Azure AD用户名密码流获取令牌并调用Web API的配置调整
一、Azure AD应用注册配置修改
- 启用资源所有者密码凭据(ROPC)流:在Web API对应的应用注册页面,进入「认证」→「高级设置」,勾选「允许公共客户端流」;同时在「认证」页面的「默认客户端类型」中,根据你的应用类型选择(如果使用客户端密钥的机密客户端,保持默认即可)。
- 配置API权限:添加Web API对应的权限(比如自定义API权限或
User.Read等微软Graph权限),必须点击「授予管理员同意」——ROPC流不支持用户动态授权,所有权限需提前完成管理员同意。 - 留存关键信息:记下应用注册的客户端ID、租户ID,如果用机密客户端,还要保存生成的客户端密钥(或证书)。
二、App Service认证层配置调整
- 在部署Web API的App Service「认证」页面,确认Azure AD提供商的「允许的令牌受众」包含Web API的应用ID URI或应用注册客户端ID。
- 确保认证层接受用户令牌:ROPC流获取的是用户身份令牌,需保证App Service的Azure AD验证逻辑允许这类令牌通过,而非仅验证应用级令牌。
三、Web API项目代码(按需调整)
如果之前的Web API仅配置了应用令牌验证,需更新Program.cs中的认证逻辑,确保支持用户令牌:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
同时appsettings.json中的AzureAd配置需包含:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "你的租户ID", "ClientId": "Web API的应用注册客户端ID", "Audience": "Web API的应用ID URI" }
四、API Management配置调整
- 添加JWT验证策略:在APIM中为你的Web API配置「验证JWT」策略,设置颁发者为
https://login.microsoftonline.com/{你的租户ID}/v2.0,受众为Web API的应用ID URI,确保只有有效用户令牌能访问API。 - 可选测试配置:在APIM测试控制台中,可直接调用Azure AD令牌端点,用ROPC参数获取令牌后测试API调用。
五、ROPC流获取令牌的请求示例
向Azure AD令牌端点发送POST请求:
POST https://login.microsoftonline.com/{租户ID}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id={你的应用注册客户端ID} &scope={Web API应用ID URI}/.default openid profile offline_access &username={Azure AD用户的UPN或邮箱} &password={用户密码} &grant_type=password &client_secret={你的应用注册客户端密钥(机密客户端时必填)}
⚠️ 注意:ROPC流存在安全风险,仅在无法使用授权码流等更安全的认证方式时使用,且该流不支持启用了MFA的用户。
内容的提问来源于stack exchange,提问作者Shailja Atkotiya
相关产品推荐
相关产品推荐

