authorization - Dynamics CRM 365 - 无效的用户授权传递给平台的用户身份验证无效

标签 authorization dynamics-crm crm microsoft-dynamics dynamics-crm-365

每当我点击一个机会来定制它

Settings - Customization - Opportunity

下面的窗口打开

Invalid User Authorization The user authentication passed to the platform is not valid.

似乎自定义窗口正在尝试打开一个事件窗口,它应该打开一个机会图表窗口。显示的唯一错误是“无效的用户授权传递给平台的用户身份验证无效”并且调试窗口中没有错误。

笔记:

  • 机会图表是唯一存在此问题的图表。如果我尝试自定义公司图表,则不会出现问题。
  • 从 XRMToolbox 发布图表有效。只有在自定义窗口中才会出现问题。
  • 在我网站的生产版本中,没有出现这个问题。
  • 我已尝试按照建议清除浏览器缓存 here .

  • ---更新1---

    回应@ConorGallagher

    它是任何机会图表还是特定的图表?

    这是所有机会图表。他们都不会打开。

    您是否尝试过打开开发人员工具并检查网络以查看到底发生了什么故障?

    我有并且开发人员工具没有显示任何错误。

    定制页面:
    Customization debug
    图表页面:
    Chart debug

    或者使用 fiddler 进行分析并找出究竟是什么失败了?

    当我点击图表时,这就是我从 fiddler 得到的全部信息:

    Fiddler debug

    生产和开发之间是否有任何不同的加密设置?

    两者的加密设置相同。

    开发组织是生产的数据库副本还是新安装的?

    开发组织是在就地升级之前工作的生产的副本。

    当您直接登录到服务器并尝试自定义图表时会发生这种情况吗?

    它发生在 PC 上,也直接发生在服务器上。

    ---更新2---

    回应@ConorGallagher

    我预计在开发人员工具的网络选项卡上的某个地方会出现 401(或某些 http 错误)。你能仔细检查那个标签只是为了看看。

    我也会,但网络选项卡中的所有内容都是 200。除了第一个是 302。请参阅下面的 fiddler 输出。

    Network tab

    回应@Pawel Gradecki

    1) 您不应该检查开发人员工具是否有脚本错误,将选项卡切换到“网络”并检查那里是否有任何 HTTP 错误。

    请参阅上面对我的网络窗口的@ConorGallagher 的快照^。

    另外你没有在 fiddler 上开启 HTTPS 解密,所以你的日志意义不大,你应该先开启这个,然后重新检查 fiddler

    我在这里道歉是启用解密的 fiddler 输出:
    Fiddler output with decryption 1
    Fiddler output with decryption 2
    这更有帮助。该页面似乎无法找到源映射 (404),然后重定向到错误页面 (302)。我不确定它是否重定向是因为它找不到源映射或因为其他一些错误。

    2) 检查服务器 Trace 日志,它们可以显示一些可用于故障排除的附加信息

    https://raw.githubusercontent.com/MasterProgrammer200/stackoverflow/master/crm/log-opportunity-user-auth.txt

    4) 您能否打开一些可用的图表设计器(例如帐户)并复制完整的 URL 并将其粘贴到单独的窗口中。对机会图表执行相同操作(将其复制并粘贴到单独的窗口)。如果它仍然不适用于 Opportunity 比较两个 URL,请尝试使用它们(交换一些查询字符串参数)。

    我玩过网址

    https://crmcanada-dev.url.com/main.aspx?appSolutionId=%7bFD140AAF-4DF4-11DD-BD17-0019B9312238%7d&extraqs=etc%3d1%26id%3d%7bA3A9EE47-5093-DE11-97D4-00155DA3B01E%7d&pagetype=vizdesigner#665349499

    Companies chart

    现在,如果我将 url 更改为:

    https://crmcanada-dev.url.com/main.aspx?appSolutionId=%7bFD140AAF-4DF4-11DD-BD17-0019B9312238%7d&extraqs=etc%3d 3 %26id%3d%7bA3A9EE47-5093-DE11-97D4-00155DA3B01E%7d&pagetype=vizdesigner#665349499

    (因为 1 是 Company 对象,3 是机会对象)。我仍然被重定向到无效的用户页面。

    Invalid user auth

    请记住非常仔细地检查服务器跟踪,因为它可以告诉您一些有意义的信息。如果你有什么东西,把它贴在这里,这样我们也可以看看。

    见上面的链接^。

    我想到的另一个想法 - 尝试备份您的组织数据库,以不同的名称恢复它,以不同的名称导入它(因此您应该在 DEV 上有一个单独的组织)。有时在组织导入过程中出现错误并不会停止导入本身,而是导致 CRM 出现一些奇怪的行为。检查这个重新导入的组织是否有同样的问题。

    这将是最后的手段。

    最佳答案

    经过一周的恳求和向编程之神(又名 Microsoft 支持)的献祭,我们终于能够找出问题所在。

    问题是,在从 CRM 2016 升级到 CRM 365 之前,我们已经删除了一个托管解决方案,但由于某种原因, View 中的一个字段没有使用它。当我们升级到 365 时,未删除的字段导致了错误。经过调查,我们在 View 创建器中有问题的字段旁边的圆圈中发现了一个感叹号。

    为了解决这个问题,我们遍历了每个 View 并删除了对我们来说是 new_opportunitytype 的麻烦字段。然后我们使用波纹管查询来扫描 CRM 数据库中是否出现 new_opportunitytype 并且必须通过编辑 SystemFormBase 表中的 xml 将其从表单中删除

    简而言之,隐藏你的 child ,隐藏你的妻子,检查你的观点,但最重要的是微软需要更好的错误处理。

    来自 Microsoft 支持的有用查询:

    /*This query searches the entire CRM database for the specified string*/
    
    declare @TableName char(256)
    declare @ColumnName char(256)
    declare @FindString char(256)
    declare @sql char(8000)
    
    /*Replace X with character(s) you which to find and Y with its replacement*/
    set @FindString = '[enter a guid or string or something]' 
    
    /*select o.name, c.name from syscolumns c inner join sysobjects o
         on o.id = c.id
         where o.xtype = 'U'*/
    
    declare T_cursor cursor for
         select o.name, c.name from sysobjects o inner join syscolumns c
               on o.id = c.id
               where o.xtype = 'U' and c.xtype in (175,239,99,231,35,167)
    
    open T_cursor
    fetch next from T_cursor into @TableName, @ColumnName
    while (@@fetch_status <> -1)
         begin
    
         set @sql = 'if exists (select * from ' + rtrim(@TableName) + ' where ' + rtrim(@ColumnName) + ' like ''%' + rtrim(@FindString) + '%'')
               begin
               print ''Table = ' + rtrim(@TableName) + '      Column = ' + rtrim(@ColumnName) + '''
               end'
    
         exec(@sql)
    
         fetch next from T_cursor into @TableName, @ColumnName 
    
         end
    
    close T_cursor
    
    deallocate T_cursor
    

    关于authorization - Dynamics CRM 365 - 无效的用户授权传递给平台的用户身份验证无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812776/

    相关文章:

    dynamics-crm - 使用 Dynamics CRM 中的 OData 检索所有 OptionSet 值

    c# - 有没有办法可以生成 CRM 中所有实体的列表以及它们是否打开了审核历史记录?

    dynamics-crm-2011 - 在 CRM 2011 中,将信息从 javascript 发送到插件的最佳方式

    ruby-on-rails - Rails 中授权的功能测试

    authentication - 考虑放弃编写自定义成员和角色提供程序的想法。意见?

    javascript - 插件不会触发使用 CRM 2016 中的操作创建的自定义消息

    c# - CRM 2011 插件 - PostTaskSetState

    node.js - node.js 和 express.js 中基于组/规则的授权方法

    c# - 我无法用自定义授权属性装饰整个 Controller

    javascript - 我们如何允许在 Dynamics CRM 中对单个字段进行多项选择?