Tag: Azure的主动目录

MVC到Azure Active Directory签署回复“错误请求”和消息“无法创建以从中获取配置”

我究竟做错了什么? 我正在尝试从示例MVC应用程序登录Azure Active Directory并获取“错误请求”。 我在这里关注这个例子(2015年7月17日): azure.microsoft.com的例子 以下是其他人对同一数据的逐步详细说明: 博客作者扩展了azure示例 我用下面的“myActiveDirectory”替换了我的活动目录的名称。 这是我的webconfig数据: <add key="ida:AppKey" value="” /> <add key="ida:ClientId" value="d2bfc007–9f” /> AccountController.cs using System.Web; using System.Web.Mvc; // OWIN using Microsoft.Owin.Security; using Microsoft.Owin.Security.OpenIdConnect; using Microsoft.Owin.Security.Cookies; namespace TodoListWebApp.Controllers { public class AccountController : Controller { public void SignIn() { // Sends an OpenID sign-in request. if (!Request.IsAuthenticated) { HttpContext.GetOwinContext(). Authentication.Challenge(new […]

如何检查azure活动目录用户是否已处于批准状态

我创建了一个Azure活动目录用户,并将用户添加到了app角色。 现在我正在检索此用户并尝试将其添加到更多应用程序角色。 var activeDirectoryUser = client.Users.Where(u => u.UserPrincipalName == user.UserName).ExecuteSingleAsync().Result as User; 作为预防措施,我想在添加之前首先检查用户是否已经处于app角色,但问题是User对象上的ApproleAssignments字段始终为空。 即使您用户具有应用程序角色分配,如果我尝试将用户添加到相同的应用程序角色,我也会收到错误。 创建新的应用角色分配。 var appRoleAssignment = new AppRoleAssignment { Id = appRole.Id, ResourceId = Guid.Parse(servicePrincpal.ObjectId), PrincipalType = “User”, PrincipalId = Guid.Parse(user.ObjectId) }; if(IsUserInAppRole(user,appRoleAssignment))return; user.AppRoleAssignments.Add(appRoleAssignment); user.UpdateAsync().Wait(); 检查用户是否处于app角色。 private bool IsUserInAppRole(User user, AppRoleAssignment appRoleAssignment) { var userInApprole = user.AppRoleAssignments.Where(ara => ara.ObjectId == appRoleAssignment.Id.ToString()); return userInApprole.Any(); […]

在C#中更快地调用PowerShell cmdlet

我可以使用C#中的Powershell cmdlet从O365获取用户详细信息。 问题是取货时间。 那太慢了。 每个用户需要2秒钟,因此如果我拥有大量用户,则会导致时间问题。 在这里,我只想打印所有用户的信息,如名称,组详细信息,许可证。 我怎样才能更快地完成? 尝试过一个: Runspace runspace = RunspaceFactory.CreateRunspace(); runspace.Open(); Pipeline UserDetailsPipe = runspace.CreatePipeline(); UserDetailsPipe.Commands.AddScript(“Get-AzureADUser”); foreach (PSObject info in UserDetailsPipe.Invoke()) /////////******* { ArrayList Groups = new ArrayList(); // to hold memberOf ArrayList Licenses = new ArrayList(); // to hold of licenses string UserPrincipalName = info.Members[“UserPrincipalName”].Value.ToString(); string DisplayName = info.Members[“DisplayName”].Value.ToString(); //Getting MemberOf Pipeline […]

使用asp.net Identity进行Azure AD身份validation以进行授权

我试图寻找互联网,但看不出我是如何实现我被要求的。 这是我的企业应用程序,它使用Asp.net Identity进行基于表单的身份validation。 我已将用户和角色与群组一起扩展,以便在我的代码中提供授权。 (注意:不使用任何组/角色指令)。 现在我被要求查看更改代码以适应Azure Active Directory身份validation的可能性。 我试着阅读如何注册应用程序,将用户发送到Azure网站进行身份validation,获取令牌等等。但是我仍然坚持’之后的事情?’ 我已经过身份validation的用户如何使用我现有的Asp.net Identity模型,其中用户存储在sql数据库中。 如何使用此标记来关联现有用户。 此外,当我将项目更改为允许Azure AD时,它会删除Aspnet.Identity包,因为它与Azure AD不兼容!! 我甚至尝试手动保存两个软件包,我得指出用户被发送到Azure上进行身份validation的位置,转移回主页并再次登录Azure AD以永无止境的循环。 总结问题,我如何从AADvalidation用户并继续使用现有的角色和组授权。 编辑:我尝试创建单独的Web服务,它将validation用户身份并发送JWT令牌。 哪个有用,如果我直接在浏览器上调用它,但是,当我尝试从我的网络应用程序调用此服务时,我得到了奇怪的错误 Application with identifier ‘a2d2—————‘ was not found in the directory azurewebsites.net 这里奇怪的部分是目录的名称是’azurewebsites.net’而不是我正在使用的默认目录。 更新这里是抛出错误的代码 public async Task Login(string returnUrl) { try { // get the access token AuthenticationContext authContext = new AuthenticationContext(authority, new TokenCache()); var clientCredential […]

Azure AD AcquireToken不适用于应用程序密码

我正在尝试使用.NET ADAL库validationAzure AD中的用户密码。 这适用于没有MFA的常规用户帐户,但是对于已激活MFA的用户,我遇到了问题。 当使用用户的实际密码时,我得到了AADSTS50076: Application password is required. ,这是公平的,但当我创建一个新的应用程序密码时,我收到错误AADSTS70002: Error validating credentials. AADSTS50020: Invalid username or password AADSTS70002: Error validating credentials. AADSTS50020: Invalid username or password 。 我创建了多个应用程序密码,但它们都不起作用。 用于尝试身份validation的代码如下: var ac = new AuthenticationContext(“https://login.windows.net/my-tenant.com”); var authResult = ac.AcquireToken(“https://graph.windows.net”, “my-client-id”, new UserCredential(“my.account@my-tenant.com”, “my-password”)); 尝试进行身份validation的用户是此AD中的全局管理员。 是否可以为具有MFA的用户进行这样的身份validation?

Azure AD API请求401未经授权

我有一个在Azure网站上运行的标准Web API,启用了Azure AD身份validation,当在浏览器中浏览到API时,我可以通过浏览器登录并获得对API的访问权限。 然而,WPF桌面应用程序在提交请求时收到未经授权的响应: var authContext = new AuthenticationContext(authority, new FileCache()); var accessToken = await authContext.AcquireTokenAsync(apiResourceid, clientId, redirectUri, new PlatformParameters(PromptBehavior.Auto)); // accessToken is valid var apiUrl = “https://example.azurewebsites.net/api/list”; var request = new HttpRequestMessage(HttpMethod.Get, apiUrl); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(“Bearer”, accessToken.AccessToken); var response = await httpClient.SendAsync(request); validation成功,我可以在调试时看到用户信息。 我无权访问Azure帐户,但我确信服务AD应用程序已正确配置以允许访问客户端AD应用程序,因为在备用帐户(未正确配置)上进行测试时, AuthenticationContext.AcquireTokenAsync方法失败。 我注意到AuthenticationResult.ExpiresOn总是在过去,但是如果这是未来的日期,则无法扩展它吗? – (时间当然是UTC) 请求: GET https://example.azure websites.net/api/categorisation HTTP/1.1 […]

异步调用时,Azure KeyVault Active Directory AcquireTokenAsync超时

我按照Microsoft的Hello Key Vault示例应用程序中的示例在我的ASP.Net MVC Web应用程序上设置了Azure Keyvault。 Azure KeyVault(Active Directory)AuthenticationResult默认情况下有一个小时到期。 因此,一小时后,您必须获得一个新的身份validation令牌。 在获得我的第一个AuthenticationResult令牌后,KeyVault正在按预期工作,但在1小时到期后,它无法获得新令牌。 不幸的是,我的生产环境失败让我意识到这一点,因为我从未测试过去一小时的开发。 无论如何,经过两天多的努力弄清楚我的keyvault代码出了什么问题,我提出了一个解决方案来修复我的所有问题 – 删除异步代码 – 但感觉非常hacky。 我想找出为什么它首先不起作用。 我的代码如下所示: public AzureEncryptionProvider() //class constructor { _keyVaultClient = new KeyVaultClient(GetAccessToken); _keyBundle = _keyVaultClient .GetKeyAsync(_keyVaultUrl, _keyVaultEncryptionKeyName) .GetAwaiter().GetResult(); } private static readonly string _keyVaultAuthClientId = ConfigurationManager.AppSettings[“KeyVaultAuthClientId”]; private static readonly string _keyVaultAuthClientSecret = ConfigurationManager.AppSettings[“KeyVaultAuthClientSecret”]; private static readonly string _keyVaultEncryptionKeyName = […]

使用Azure AD Graph客户端API更改用户密码的权限问题

我试图在ASP.Net MVC中创建一个页面来重置当前用户的密码。 我使用Azure Active Directory进行用户身份validation。 要访问用户的AD信息,我使用的是C#Graph API客户端。 我的代码基于GitHub上的示例 我可以更改用户的信息(例如城市,州,电子邮件)。 但是,当我尝试使用用户对象上的PasswordProfile属性更改密码时,我收到一条错误消息,指出我没有足够的权限。 我试图将密码更改为应用程序,我相信权限问题的来源是应用程序。 我找到了以下PowerShell脚本,该脚本应该将公司管理员角色添加到应用程序中。 但是,对Get-MsolServicePrincipal的调用不会返回任何内容。 查看命令的输出,我没有看到任何类似于我的应用程序名称的条目。 #———————————————————– # This will prompt you for your tenant’s credential # You should be able to use your your Azure AD administrative user name # (in the admin@tenant.onmicrosoft.com format) #———————————————————– import-module MSOnline Connect-MsolService #———————————————————– # Replace the Application Name with the […]

如何在ASP.NET MVC上执行Azure Active Directory单一登录和表单身份validation

我们有MVC 4使用表单身份validation和Web API基本身份validation开发的遗留系统(到目前为止还没有OWIN)。 现在我们有很多客户想要在我们的系统中进行单点登录,因此我们使用Azure Active Directory(AAD)来存储客户端的用户。 现在情况是我们想要修改登录工作流程以适应AAD。 登录页面没有任何变化,我们检查用户是否存在于我们的系统上(使用我们的数据库),它允许用户访问。 如果没有,我们继续在AAD上检查用户,在这种情况下我们不想重定向到Azure登录页面。 我已经完成了大量的阅读,但还不清楚如何做到这一点? 我们还考虑升级到MVC 5,以便在情况良好的情况下使用OWIN中间件身份validation。

Azure Active Directory与MVC,客户端和资源标识相同的应用程序

跟进这个问题: 如何在ASP.NET MVC上执行Azure Active Directory单一登录和表单身份validation 我尝试在默认MVC 4的Login操作上编写简单代码,它使用默认的Forms身份validation和Azure Active Directory SSO: public async Task Login(LoginModel model, string returnUrl) { if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) { return RedirectToLocal(returnUrl); } authContext = new AuthenticationContext(authority, new TokenCache()); var result = await authContext.AcquireTokenAsync(resourceId, clientId, new UserCredential(model.UserName, model.Password)); // more code } 因此,如果正常的登录WebSecurity.Login不成功,我尝试通过使用带有凭据(用户名/密码)的ADAL.NET从AAD获取令牌: http ://www.cloudidentity.com/blog/2014/07 / 08 /使用阿达尔网到身份validation用户-通usernamepassword / […]