我正在尝试从CRM中的iFrame中的here获取OpenIDConnect Azure示例。我已经部署到Azure,直接点击网站时登录工作正常。
当我通过CRM Online中的iFrame访问该网站时,它显示正常,但当我尝试登录时,我收到以下错误:
Microsoft.IdentityModel.Protocols.OpenIdConnectProtocolInvalidNonceException: IDX10311: RequireNonce is 'true' (default) but validationContext.Nonce is null. A nonce cannot be validated. If you don't need to check the nonce, set OpenIdConnectProtocolValidator.RequireNonce to 'false'.
经过一番调查后,我更新了OWIN中间件配置,将RequireNonce设置为false:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
ProtocolValidator = new Microsoft.IdentityModel.Protocols.OpenIdConnectProtocolValidator()
{
RequireNonce = false
}
});
当我现在尝试登录时,我现在得到以下异常,我已经碰壁了。
Microsoft.IdentityModel.Protocols.OpenIdConnectProtocolException: invalid_request
非常感谢任何帮助。我理解nonce的使用,但是我还没有理解在这个用例中禁用它的全部意义,所以在不需要禁用的情况下使其工作是理想的。
答案 0 :(得分:3)
出于安全原因,无法使用iFramed进行身份验证。此外,关闭Nonce验证非常危险 - 我强烈建议不要这样做。您可以参考OAuth2和OpenId Connect威胁模型,以获取有关您将要承担的风险的具体细节,但是框架破坏逻辑应该使这一点没有实际意义。