使用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 = new ClientCredential(clientId, password); //Error on below line AuthenticationResult result = await authContext.AcquireTokenAsync(resourceId, clientCredential); // give it to the server to get a JWT HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); ...... 

我有一个类似的问题,所以我创建了一个Office 365 owin安全插件。 我在github上分享了代码。 它基于codeplex的katana项目 。

您可以在https://github.com/chadwjames/wakizashi找到源代码。

您需要在此处注册您的申请。 注册应用程序时,将回拨uri设置为https:// yourdomain / signin-office365

应用程序ID是您的客户端ID,密码是您的客户端密钥。

注册后,您可以修改Startup.Auth.cs并将其添加到ConfigureAuth方法中。

  //setup office 365 var office365Options = new Office365AuthenticationOptions { ClientId = ConfigurationManager.AppSettings["ada:ClientId"], ClientSecret = ConfigurationManager.AppSettings["ada:ClientSecret"], Provider = new Office365AuthenticationProvider { OnAuthenticated = async context => { await Task.Run( () => context.Identity.AddClaim(new Claim("Office365AccessToken", context.AccessToken))); } }, SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie }; office365Options.Scope.Add("offline_access"); app.UseOffice365Authentication(office365Options); 

当我有更多时间时,我希望为此创建一个nuget包。