我有两个 Angular 6 应用程序在使用 Azure AD B2C 的生产环境中运行。
当我开始第一个项目时,它是 Angular 2(我也为这些项目进行操作,因此它们是最新的)感觉 MSAL 还不够远,我找不到 NPM为它打包。所以我决定使用 Manfred Steyer 的开源 angular-oauth2-oidc 组件,我不后悔。该组件已通过 OpenID Connect 认证且易于使用(Azure AD B2C 除外 ?)。
为了将组件与 Azure AD B2C 一起使用,您必须提供一个配置,其中包含一些您可以从发现文档中获取的值(例如,
https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=b2c_1_sign_in)。这是我的配置的样子:
export const aadB2cNoDiscoveryConfig: AuthConfig = {
'clientId': '<GUID>',
'redirectUri': window.location.origin,
'loginUrl': 'https://login.microsoftonline.com/<TENANT>.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_signin',
'logoutUrl': 'https://login.microsoftonline.com/<TENANT>.onmicrosoft.com/oauth2/v2.0/logout?p=b2c_1_signin',
'scope': 'openid https://<TENANT>.onmicrosoft.com/<TENANT>.api/user_impersonation',
'oidc': true,
'issuer': 'https://login.microsoftonline.com/<GUID>/v2.0/',
'tokenEndpoint': 'https://login.microsoftonline.com/<TENANT>.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1_signin',
'responseType': 'id_token token',
'clearHashAfterLogin': true,
'disableAtHashCheck': true,
'showDebugInformation': true,
'strictDiscoveryDocumentValidation': false,
'jwks': {
'keys': [
{
kid: "X5eX....",
nbf: 14....,
use: "sig",
kty: "RSA",
e: "AQAB",
n: "tV......"
}]
}
}
为了登录,我在 app.component 的构造函数中调用了类似的东西:
this.oauthService.configure(aadB2cNoDiscoveryConfig);
this.oauthService.tokenValidationHandler = new JwksValidationHandler();
this.oauthService.tryLogin()
如果我必须使用 Azure AD B2C 实现另一个 Web 应用程序,我会考虑再次尝试 MSAL,但会毫不犹豫地回退到 angular-oauth2-oidc。
注意:如果您使用 .NET Core 中间件来为 Angular SPA 提供服务,您可以简单地添加一个 OpenID Connect 中间件。
这是一个good starting point。