gpt4 book ai didi

angular - 发现文档中的发行者无效,预期为 : angular-oauth2-oidc with Azure B2C

转载 作者:太空狗 更新时间:2023-10-29 17:28:01 25 4
gpt4 key购买 nike

目前我正在开发一个 Angular2 应用程序,并希望使用 B2C 租户进行身份验证。它不起作用,因为我收到错误:

发现文档中预期的发行者无效:

设置和配置与https://github.com/manfredsteyer/angular-oauth2-oidc中的完全相同。已描述。

在给定的示例中使用了以下函数:

private configureWithNewConfigApi() {
this.oauthService.configure(authConfig);
this.oauthService.tokenValidationHandler = new JwksValidationHandler();
this.oauthService.loadDiscoveryDocumentAndTryLogin();
}

不幸的是,loadDiscoveryDocumentAndTryLogin 对我不起作用,因为对于 Azure B2C,我需要添加另一个带有附加参数(策略)的 URI。所以我尝试了“旧”函数loadDiscoveryDocument

新代码如下所示:

private configureWithNewConfigApi() {
this.oauthService.configure(authConfig);
this.oauthService.tokenValidationHandler = new JwksValidationHandler();
//this.oauthService.loadDiscoveryDocumentAndTryLogin();

const result = this.oauthService.loadDiscoveryDocument(
'https://login.microsoftonline.com/myportalb2c.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_signin_signup')
.then(() => {
console.log('b2c discovery loaded');
this.oauthService.tryLogin({});
}).catch(() => {
console.error('b2c discovery load error');
});
}

这是该函数的第一部分:

public loadDiscoveryDocument(fullUrl: string = null): Promise<object> {

return new Promise((resolve, reject) => {

if (!fullUrl) {
fullUrl = this.issuer || '';
if (!fullUrl.endsWith('/')) {
fullUrl += '/';
}
fullUrl += '.well-known/openid-configuration';
}

这是 github 示例中的函数:

public loadDiscoveryDocumentAndTryLogin() {
return this.loadDiscoveryDocument().then((doc) => {
return this.tryLogin();
});
}

loadDiscoveryDocument 验证文档:

if (!this.validateDiscoveryDocument(doc)) {
this.eventsSubject.next(new OAuthErrorEvent('discovery_document_validation_error', null));
reject('discovery_document_validation_error');
return;
}

问题出在 validateDiscoveryDocumentB2C

原因是函数的第一部分:

 if (doc['issuer'] !== this.issuer) {
console.error(
'invalid issuer in discovery document',
'expected: ' + this.issuer,
'current: ' + doc['issuer']
);
return false;
}

B2C 发行人是:

  issuer: 'https://login.microsoftonline.com/myportalb2c.onmicrosoft.com/v2.0/',

提示:myportalb2c 不是真正的门户。如果我调用标准 URI 或使用我的策略 (fullUrl),则响应文档中的颁发者与 URI 中的颁发者不同。似乎 URI 的一部分已被 GUID 替换

"issuer": "https://login.microsoftonline.com/GUID/v2.0/", "authorization_endpoint": "https://login.microsoftonline.com/myportalb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_signin_signup", "token_endpoint": "https://login.microsoftonline.com/myportalb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1_signin_signup"

**https://login.microsoftonline.com/myportalb2c.onmicrosoft.com/v2.0/
!=
https://login.microsoftonline.com/GUID/v2.0/**

有人遇到同样的情况并找到解决方法吗?文件中的发行人为何不同?

我还尝试了以下包:

https://github.com/vip32/angular-oauth2-oidc-b2c

我的工作一般,但有时我需要在最终登录的应用程序中登录多次。

预先感谢您的支持!

最佳答案

我在使用 AzureAD 2.0 时遇到了类似的问题,这是我设法做到的。

据我所知,您无法中继发现文档,因为 AzureAD 不允许任何域访问此 Json。我设法进行身份验证,但我需要手动设置所有配置。引用this issuethis issue 。另外一件重要的中继事情是,如果您需要从 Azure 向 Web API 提供此 token ,不要发送访问 token ,而是发送id token 。有关此的更多信息请参见 link

我现在不知道这是否有帮助,但它对我有用。

关于angular - 发现文档中的发行者无效,预期为 : angular-oauth2-oidc with Azure B2C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com