[AX2012]Claims user

AX2012能够建立一种account type为claims user的帐号,这种帐号不须要在AD中事先已建立用户,可是claims帐号是没法经过rich client登录到AX,它的主要应用场景是在enterprise protal或者AIF中,这里具体来看看如何在AIF中使用Claims user。首先在AX中建立一个Claims user:c#

User Id是必须输入的,根据本身的命名规则能够任意编写,network domain也是能够根据本身的用途任意输入,alias可使用邮件地址。app

接下来咱们建立一个名为ItemsPort的inbound ports,service operations中只选择InventItemService.find操做。须要注意的是咱们要勾选“Allow trusted intermediary to impersonate”,在Trusted intermediary users中咱们添加一个用户,好比Administrator帐号。这是一个AD域用户的帐号,后续咱们的程序要用这个帐号来执行。dom

建立一个c#的控制台程序,在service reference中添加从http://AOS_HOST:8101/DynamicsAx/Services/ItemsPort导入的服务,命名空间咱们取为ItemReference。完整的程序以下:this

using ConsoleApplication1.ItemReference;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var context = new CallContext
                              {
                                  Company = "USMF",
                                  LogonAsUser = "TestApp\\cu001@testapp.local",
                                  Language = "en-gb"
                              };
            var client = new ItemServiceClient();
            var criteria = new QueryCriteria();
            var itemIdCriteria = new CriteriaElement
                                     {
                                         DataSourceName = "InventTable",
                                         FieldName = "ItemId",
                                         Operator = Operator.Range,
                                         Value1 = "A",
                                         Value2 = "B"
                                     };
            criteria.CriteriaElement = new CriteriaElement[1];
            criteria.CriteriaElement[0] = itemIdCriteria;

            try
            {
                var myItem = client.find(context, criteria);
                if (myItem != null &&
                    myItem.InventTable != null &&
                    myItem.InventTable.Length > 0)
                {
                    foreach (var item in myItem.InventTable)
                    {
                        Console.WriteLine("Item Id {0} - {1}", item.ItemId,item.NameAlias);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error {0}", e.Message);
            }

            Console.ReadKey();
        }
    }
}

程序是在inventtable查找首字母介于A和B直接的料号,运行后获得的结果是:“Error Access denied to method find in class InventItemService.”,这是由于咱们没有对CU001用户授予权限,能够添加system administrator角色到CU001,从新运行就能获得正确的结果。spa

注意咱们运行这个C#程序时用的域管理员帐号,这个帐号也是被添加到ItemPorts的Trusted intermediary users列表,若是咱们把这个帐号从Trusted intermediary users删除会是什么结果?咱们会获得异常“Error An error occurred.”,具体的信息能够在system administration->periodic->services and application framework->exceptions查看,看到的是“The submitting user 'admin' has not been configured as a trusted intermediary for the port.”,“User is not authorised for this port.”。代理

若是不勾选“Allow trusted intermediary to impersonate”,又会是什么结果呢?获得的错误是“The submitting user 'Admin' is different from the logon user 'CU001', but a trusted intermediary has not been enabled on the port.”,一样最后结果也是“User is not authorised for this port.”。code

回过头来看看AX没有要求CU001用户输入密码,只用它的用户名就能够登录,这是由于AX信任当前程序的运行帐号,相信这个Trusted intermediary users已经代为对CU001进行了认证。这是AIF的例子,EP也是一样如此,咱们不须要对vendor和customer在AD中建立帐号,而是直接在AX中建立对应的claims用户,而对这些用户的认证交由EP站点,AX信任EP站点链接时全部的BCP 代理帐号。blog

相关文章
相关标签/搜索