[AX2012]Claims user

AX2012可以创建一种account type为claims user的账号,这种账号不需要在AD中事先已创建用户,但是claims账号是无法通过rich client登陆到AX,它的主要应用场景是在enterprise protal或者AIF中,这里具体来看看如何在AIF中使用Claims user。首先在AX中创建一个Claims user:

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

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

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

using ConsoleApplication1.ItemReference;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var context = new CallContext
                              {
                                  Company = "USMF",
                                  LogonAsUser = "TestApp\\[email protected]",
                                  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,重新运行就能得到正确的结果。

注意我们运行这个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.”。

回过头来看看AX没有要求CU001用户输入密码,只用它的用户名就可以登陆,这是因为AX信任当前程序的运行账号,相信这个Trusted intermediary users已经代为对CU001进行了认证。这是AIF的例子,EP也是同样如此,我们不需要对vendor和customer在AD中创建账号,而是直接在AX中创建对应的claims用户,而对这些用户的认证交由EP站点,AX信任EP站点连接时所有的BCP 代理账号。

时间: 2024-11-05 20:34:24

[AX2012]Claims user的相关文章

AX2012 Business Connector Error

6.0: AxCryptoClient - New encryption key created 6.0: Unable to InitializeSession. 6.0: No built-in message corresponding to message id 0. 解决方法: 1.将登录用户设为AX中的Business Connector用户. 2.将AX中的Business Connector用户添加到本地管理员组. AX2012 Business Connector Error,

Asp.net Core, 基于 claims 实现权限验证 - 引导篇

什么是Claims? 这个直接阅读其他大神些的文章吧,解释得更好. 相关文章阅读: http://www.cnblogs.com/JustRun1983/p/4708176.html http://www.cnblogs.com/jesse2013/p/aspnet-identity-claims-based-authentication-and-owin.html http://www.cnblogs.com/savorboard/p/aspnetcore-identity.html clai

SharePoint Adventures : Using Claims with Reporting Services

Cannot convert claims identity to a windows token.  This may be due to user not logging in using windows credentials. solusion: This service is enabled via Central Admin –> Application Management –> Service Applications –> Manage services on serv

MVC5 A claim of type 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier' or 'http://schemas.microsoft.com/accesscontrolservice/2

前台页面使用@Html.AntiForgeryToken()和Controller中的[ValidateAntiForgeryToken]配合使用可以防止CSRF攻击,详细介绍可查看一下链接: http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html 出现当前错误,是因为在登陆完成为当前用户创建ClaimsIdentity对象时没有指定ClaimTypes,导致验证时不知道该用什么类型进行验证,或者验证类型不正确. 解决办法: 打开

AX2012 菜单根据不同公司动态显示

今天研究AX2012中国式报表时发现,在AX2012中只有在CNMF公司才能显示中国财务报表,很是奇怪,查看了报表的菜单项,发现了一个新增的属性,原来AX2012在菜单项MenuItem上增加了一个属性CountryRegionCodes国家代码 那这个属性是如何起作用的呢? 先做个测试,在这个属性上再加个国家代码看看 结果就是在USMF公司里面可以看到这份报表了 查看了公司法人的设置,唯一有涉及国家代码的就是地址了,找个其他公司再测试一下,增加一个国家为USA的地址,结果是没有显示出这份报表~

Claims Identity

using System;using System.Collections.Generic;using System.Linq;using System.Security.Claims;using System.Security.Principal;using System.Text;using System.Threading;using System.Threading.Tasks; namespace SecurityDemo{ class Program { static void Ma

AX2012 R3升级CU8的一些错误

AX2012 R3安装升级包CU8后进入系统,系统会提示打开软件升级清单“Software update checklist”,清单列出了升级要做的一系列动作. 在进行到编译应用时“Compile application”出现很多错误: Severity Path Line Col Error message Error \Classes\PayrollCalculatePayStatementBenefits\classDeclaration 12 5 Syntax error. Error

全新的membership框架Asp.net Identity(2)——绕不过的Claims

本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕不过的内容.今天就和大家一起分享一下什么是Claims以及为什么Identity要基于Claims. 阅读目录: 一. 什么是Claims以及基于Claims的identity验证 二. 使用基于Claims的Identity验证的优势 三. Claims是如何应用在Asp.net中? 四,一些更深

Claims Based Authentication and Token Based Authentication

基于声明的认证方式,主要用于第三方认证. A claim is a statement that one subject makes about itself or another subject. The statement can be about a name, identity, key, group, privilege, or capability, for example. Claims are issued by a provider, and they are given on