关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复124或者20140324可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!

本博文主要参考但不限于如下资料:

1.  Post-installation and configuration guidelines for Microsoft Dynamics CRM 2013

2. SDK上 Write mobile and modern apps 章节。

目前本博文是基于Windows Server 2012 R2,它自带的 AD FS 的版本是 2.2,其他版本不支持。

首先要在AD FS服务器上为Intranet打开基于表单的验证,这里我的 前一篇博文 已经讲了。

1. 以管理员身份登陆到AD FS服务器。

2. 打开 AD FS管理界面。

3.点击左边的 身份验证策略,会看到中间的 主要身份验证 部分的 全局设置,点击  编辑 链接。

4.将Intranet下面的 表单身份验证 勾选。

处理后界面如下。

然后就是在AD FS服务器上打开PowerShell,执行如下命令:

Add-PSSnapin Microsoft.Crm.PowerShell
$fedurl = Get-CrmSetting -SettingType ClaimsSettings
$fedurl.FederationProviderType = 1
Set-CrmSetting $fedurl

值得一提的是,虽然FederationProviderType设置为了1,但是就算重启了服务器,这个值还是没有改过来,这算是一个Bug吧,囧。

但是根据最新版本的官方文档:Post-installation and configuration guidelines for Microsoft Dynamics 365,上面的命令不用执行,而应该是执行如下的命令:

$ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings
$ClaimsSettings.Enabled = $true
Set-CrmSetting -Setting $ClaimsSettings

截图如下:

这个设置以后,重新获取的话,显示Enabled=true,至少看起来正常了。

接下来是添加 AD FS 客户端:

官方的示例代码是:

Add-AdfsClient -ClientId ce9f9f18-dd0c-473e-b9b2-47812435e20d -Name "Dynamics CRM Mobile Companion" -RedirectUri ms-app://s-1-15-2-2572088110-3042588940-2540752943-3284303419-1153817965-2476348055-1136196650/, ms-app://s-1-15-2-1485522525-4007745683-1678507804-3543888355-3439506781-4236676907-2823480090/, urn:ietf:wg:oauth:2.0:oob

我随便添加一个,以备后来用于web应用程序的开发。

Add-AdfsClient -ClientId "ba106265-fb3b-49e0-a0e8-6840b3d71ac2" -Name "luoyong's dynamics CRM ADFS Client" -RedirectUri "http://www.luoyong.me"

 
 
下面我介绍如何配制才能运行SDK\SampleCode\CS\ModernAndMobileApps\ModernOdataApp 这个程序,我这里是以管理员身份运行Visual Studio 2012来打开它。

首先打开它,需要安装一个Nuget Package,点击 工具 > 库程序包管理器 > 程序包管理器控制台 。

然后使用如下命令安装:

Install-PackageMicrosoft.Preview.WindowsAzure.ActiveDirectory.Authentication

可以看到安装成功了。

 

当然,通过 工具 >  库程序包管理器 > 管理解决方案的NuGet程序包也是可以看到已经安装了的。

在增加Adfs Client的时候需要为RedirectUri参数赋值,这个值怎么获取呢?可以通过WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString() 来获取。修改程序中的 CurrentEnvironment.cs 文件,增加一行 string x = redirectUrl; ,在这行设置断点,然后debug这个程序,就可以获取到了。

 

这样我们就可以增加一个AdfsClient了,在Adfs服务器上打开PowerShell,运行如下命令:

Add-AdfsClient -ClientId 73893D88-63E6-485E-9953-9CF50330748E -Name "luoyong's win8 desk app adfs client" -RedirectUri ms-app://s-1-15-2-2546649515-4026661643-3605107077-273277970-2480924813-1788835805-1056465539

当然ClientId参数的值可以随意,唯一标志本Client即可。官方建议用Guid,我这里是用Visual Studio生成了一个Guid。然后我用Get-AdfsClient来查看下,确保添加成功了。

然后是修改配置,主要是修改我下图所示的三个常量的值。_ClientID常量的值我设置为上文我们增加的AdfsClient的ClientId参数的值,其余两个根据你的CRM部署来设置。

 
然后我Debug起来会看到如下的登陆页面。 

我这里输入的凭据如下:

 

点击登陆以后可以看到如下的界面:

我这里打开Accounts功能给大家看。

 
 你还会发现第二次debug的时候不需要登陆了,这个密码肯定是被存储起来了,应该是存储在 凭据管理器 中,打开控制面板,点击 凭据管理器。 
 
你会发现多了Web凭据如下。
 注意,如果是Dynamics 365 Customer Engagement V9.0 On-Premise,根据官方文档: Post-installation and configuration guidelines for Microsoft Dynamics 365 ,还需要首先启用OAuth设置:

$ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings
$ClaimsSettings.Enabled = $true
Set-CrmSetting -Setting $ClaimsSettings

在注册Client后,还需要做如下设置:

Grant-AdfsApplicationPermission -ClientRoleIdentifier "ba106265-fb3b-49e0-a0e8-6840b3d71ac2" -ServerRoleIdentifier "https://demo.luoyong.me/"

其余的没什么变化了.

如果还有问题参考下 Dynamic CRM api HttpClient Request Authentication with ADFS 3.0

Dynamics CRM 配置 OAuth 2.0的更多相关文章

  1. Dynamics CRM模拟OAuth请求获得Token后在外部调用Web API

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复233或者20161104可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  2. crm on premise IFD 部署下提供oauth 2.0 集成自定义应用

    很多情况下我们的CRM系统会和弟三方应用集成,一般情况我们会开发一个中间站点来提供web api 给弟三方应用. 参考:http://alexanderdevelopment.net/post/201 ...

  3. Dynamics CRM 4.0升级Dynamics CRM 2013后全局Ribbon的修改

    最近在为一个客户在Dynamics CRM 4.0到Dynamics CRM 2013的升级,升级之后发现原来在Dynamics CRM 4.0中定义的全局Ribbon按钮像牛皮癣一样,在每个实体页面 ...

  4. 一、Microsoft Dynamics CRM 4.0 SDK概述

    Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...

  5. Microsoft Dynamics CRM4.0 JScript 过滤lookup 出现 Microsoft Dynamics CRM 窗口无法打开,可能已被弹出窗口阻止程序所阻止。

    一.现象:JScript过滤lookup字段,选择lookup字段出现下图的情况: 出现:Microsoft Dynamics CRM 窗口无法打开,可能已被弹出窗口阻止程序所阻止.请将这台Micro ...

  6. Microsoft Dynamics CRM4.0 和 Microsoft Dynamics CRM 2011 JScript 方法对比

    CRM 2011 如果需要再IE里面调试,可以按F12在前面加上contentIFrame,比如 contentIFrame.document.getElementById("字段" ...

  7. Microsoft Dynamics CRM 4.0导入组织(Import Organization)时间过长的原因总结

    952934    How to move the Microsoft Dynamics CRM 4.0 deployment http://support.microsoft.com/default ...

  8. 从 Microsoft Dynamics CRM 4.0 server迁移到 Microsoft Dynamics CRM 2013 Server

    不能就地升级早于 Microsoft Dynamics CRM Server 2011 的版本号,比方 Microsoft Dynamics CRM 4.0 server.可是,能够在升级过程中使用 ...

  9. Dynamics CRM 2015中的SSRS Report集成配置

    大家应该都知道.Dynamics CRM能集成SSRS Report,而且我也在之前的博文中讨论过怎样制作一个简单的SSRS Report并部署到Dynamics CRM中.今天我们来看看一些比較有用 ...

随机推荐

  1. URL 规范 整理

    URL 规范 不用大写:(强制) 用中杠-不用下杠_:(强制) 参数列表要encode,编码使用utf-8:(强制) URI中的名词表示资源集合,使用复数形式.(建议) 增加版本号(建议) URI中统 ...

  2. .NET之IOC控制反转运用

    当前场景: 如果有不同的用户.使用同一个系统.而不同的客户有某些不同的需求.在不改变系统主体的情况下,可以直接使用IOC控制反转依赖搭建项目 1.添加接口层 目前里面只有一个会员的类.里面有一个登录接 ...

  3. python_字典 list_4

    >>> import string>>> import random #组合字符>>> x=string.ascii_letters+string ...

  4. spring+springmvc+mybatis构建系统

    今天和大家分享的是spring+springmvc+mybatis搭建框架的例子,说到这里不得不说现在市面上一流大公司还有很多用这种架子,创业型公司大部分都用springboot集成的mvc+myba ...

  5. Day1 《机器学习》第一章学习笔记

    <机器学习>这本书算是很好的一本了解机器学习知识的一本入门书籍吧,是南京大学周志华老师所著的鸿篇大作,很早就听闻周老师大名了,算是国内机器学习领域少数的大牛了吧,刚好研究生做这个方向相关的 ...

  6. HTML5 CSS3 专题 :诱人的实例 3D展示商品信息

    强化下perspective和transform:translateZ的用法.传统的商品展示或许并不能很好的吸引用户的注意力,但是如果在展示中添加适当的3D元素,~说不定效果不错哈~ 效果图: 说明一 ...

  7. Github管理自己的代码-远程篇

    一.名词解释 Git Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版 ...

  8. Java借助CountDownLatch完成异步回调

    public class AsyncDemo { private static void doSomeTask() { System.out.println("Hello World&quo ...

  9. 【codeforces 698C】LRU

    题目链接: http://codeforces.com/problemset/problem/698/C 题目大意: n个物品,k个格子,第i个物品每次被选取的概率为$p_{i}$,如果格子里没有该物 ...

  10. BZOJ3629(JLOI2014)聪明的燕姿

    (⊙﹏⊙)我交了好久,有坑啊...(如果没有匹配的话,即输出0种情况要记得换行...) 就是搜索,加上一点数论,并不太难... #include<cstdio> #include<c ...