如何使用Azure AD调用多租户服务Web API的多租户AngularJS单页面应用程序启用身份验证?
这是我尝试启用的高级别流程:
多租户AngularJS应用程序[ ClientApp ] - > 多租户ASP.NET Web API [ ServicesApp ]
我有一个多租户AngularJS应用程序,需要使用ADAL for JS(OpenID Connect)进行Azure AD登录。该Web应用程序在开发人员Azure AD中注册为多租户应用程序ClientApp
,我将其称为DevAAD
。我同意在另一个Azure AD中使用此ClientApp
应用程序,我将其称为Tenant1
。一旦Tenant1
目录中的用户使用其凭据登录到Web应用程序login.microsoftonline.com门户,他们就能够访问Web UI。但是,UI无法使用OAuth 2.0隐式流代表用户调用Web API。这是我在Javascript代码中看到的错误消息:
AADSTS65001:用户或管理员未同意使用 ID为'< ClientApp_ClientID>'的应用程序。发送互动 此用户和资源的授权请求。
还有另一个Azure AD多租户应用程序,它表示名为ServicesApp
的后端Web API服务,该应用程序在与DevAAD
UI应用程序相同的ClientApp
目录中注册。 ServicesApp
的客户端ID和应用ID URI是这些服务的有效受众。此ServicesApp
个应用程序已在同一Tenant1
目录中同意。从具有ServicesApp
权限的本机客户端应用程序调用时,服务使用控制器中Tenant1
属性中提供的OWIN中间件来授权System.IdentityModel.Tokens.Jwt 4.0.0 and the [System.Web.Http.Authorize]
目录中的用户。
配置详情:
ClientApp
Azure AD应用程序清单将availableToOtherTenants
设置为true,将oauth2AllowImplicitFlow
设置为true。 ClientApp
有权访问ServiceApp
Azure AD应用程序。
AngularJS应用程序具有以下配置:
adalAuthenticationServiceProvider.init(
{
tenant: 'common',
clientId: <ClientApp_ClientID>,
endpoints: { <ServiceEndpoint> : <ServiceApp_ClientID> }
}, $httpProvider);
ServiceApp
在传递给TokenValidationParameters
的{{1}}配置对象中的WindowsAzureActiveDirectoryBearerAuthenticationOptions
对象中,ValidateIssuer设置为false
“
“ServiceApp”Azure AD清单中的knownClientApplications“属性是 设置为[“&lt; ClientApp_ClientID&gt;”]
我无法找到调用多租户Web API的多租户Web应用程序的任何示例,特别是使用AngularJS构建的单页面应用程序。如何使用Azure AD实现这一点?
答案 0 :(得分:0)
您应该尝试使用描述为here的模板生成授权码网址。
您也可以复制它并用您自己的值替换值:
https://login.microsoftonline.com/common/oauth2/authorize?client_id=<appid>&response_type=code&redirect_uri=<replyurl>&resource=<resource>&prompt=admin_consent
注意在url的末尾我添加了查询字符串:“prompt = admin_consent”。 这是只有公司管理员可以做的事情,并且它将同意您的应用程序为整个租户,以便将来没有其他人需要同意。请注意,如果您只想在单个用户级别同意,则可以将其更改为“prompt = consent”,如果您不想强制同意提示,则可以将其全部删除。
请告诉我这是否有帮助!