如何启用多租户授权(AngularJS< - > Azure AD)?

时间:2017-01-25 22:32:08

标签: angularjs asp.net-web-api oauth-2.0 azure-active-directory openid-connect

如何使用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实现这一点?

1 个答案:

答案 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”,如果您不想强制同意提示,则可以将其全部删除。

请告诉我这是否有帮助!