目前我正在开发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();
});
}
LoadDiscovery文档验证文档:
if (!this.validateDiscoveryDocument(doc)) {
this.eventsSubject.next(new OAuthErrorEvent('discovery_document_validation_error', null));
reject('discovery_document_validation_error');
return;
}
问题存在于validateDiscovery文档和B2C
原因是功能的第一部分:
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替换
“发行人”:https://login.microsoftonline.com/GUID/v2.0/“,“授权\终端”:”https://login.microsoftonline.com/myportalb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_signin_signup“,“令牌_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
我通常可以工作,但有时我需要在最终登录的应用程序中登录几次。
提前感谢您的支持!
不幸的是,Azure AD不支持CORS,这就是为什么库不能加载发现文档。您可以手动配置LIB(参见此文档;该示例还用替代配置方法演示)或编写自己的REST服务,支持CORS和委托给MS的发现endpoint。在这种情况下,您需要考虑发现文档指向进一步的文档ESP JWKs。在这种情况下,这也需要“隧道”。
我对AzureAD 2.0有一个简单的问题,下面是我设法做的。
据我所知,你不能转发发现文档,因为AzureAD不允许任何域访问这个Json。我设法进行了身份验证,但我需要手动设置所有配置。请参阅本期和本期。还有一件很重要的事情,如果你需要从Azure向你的web API提供这个令牌,不要发送访问令牌,而是发送id令牌。有关这方面的更多信息,请访问此链接
我现在不知道这是否有帮助,但它对我有帮助。
我也面临同样的问题,但当我通过strictDiscoveryDocumentValidation
asfalse
时,我的问题就解决了
在AuthConfig中,请设置
strictDiscoveryDocumentValidation: false
我已经创建了证书来启用应用程序中的推送服务,但每次我尝试在钥匙串中添加证书时,添加证书后会显示以下错误: 此证书的颁发者无效
Contents MDS 内部数据结构
内容目录 Backfill Reservation Erasure Coded Placement Groups Glossary Table of content Developer notes Introduction Reading and writing encoded chunks from and to OSDs Erasure code library Notes Jerasure
YodaOS 是 Rokid 公司为人机交互设备开发的开源人工智能操作系统,可用于智能音箱、智能眼镜、智能家居、儿童故事机和车载等多种设备和场景。
我有一个问题: WWW Authenticate Bearer realm=“test”,error=“invalid_token”,error_description=“invalid token issuer.Expected”http://keycloak:8080/auth/realms/test“但是”http://localhost:8080/auth/realms/test“ 我的设