我试图在互联网上寻找,但却看不出我是如何实现我所要求的。这是我的企业应用程序,它使用Asp.net Identity进行基于表单的身份验证。我已将用户和角色与群组一起扩展,以便在我的代码中提供授权。 (注意:不使用任何组/角色指令)。
现在我被要求查看更改代码以适应Azure Active Directory身份验证的可能性。我试着阅读如何注册应用程序,将用户发送到Azure网站进行身份验证,获取令牌等等。但是我仍然坚持'之后的事情?'我已经过身份验证的用户如何使用我现有的Asp.net Identity模型,其中用户存储在sql数据库中。如何使用此标记来关联现有用户。
此外,当我将项目更改为允许Azure AD时,它会删除Aspnet.Identity包,因为它与Azure AD不兼容!!
我甚至尝试手动将两个软件包并排放置,我指出用户被发送到Azure上进行身份验证的位置,转移回主页并再次以永无止境的循环登录Azure AD。
总结问题,如何从AAD验证用户并继续使用现有的角色和组授权。
修改 我尝试创建单独的Web服务,它将验证用户身份并发送JWT令牌。哪个有用,如果我直接在浏览器上调用它,但是,当我尝试从我的网络应用程序调用此服务时,我得到了奇怪的错误
Application with identifier 'a2d2---------------' was not found in the directory azurewebsites.net
这里奇怪的部分是目录的名称是'azurewebsites.net',而不是我正在使用的默认目录。
更新 这是抛出错误的代码
public async Task<ActionResult> 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);
......
答案 0 :(得分:0)
尝试一下:
var client = new RestClient("https://login.microsoftonline.com/{tenant-
Id}/oauth2/v2.0/token");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddHeader("grant_type", "password");
request.AddParameter("application/x-www-form-urlencoded",
"grant_type=password&client_id={client-Id}&client_secret={client-
secret}&scope={scopeurl}&userName={username}&password={password}",
ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var json = response.Content;
var JSONObject = JObject.Parse(json);
var token = (string)JSONObject["access_token"];
答案 1 :(得分:-1)
我遇到了类似的问题,所以我创建了一个Office 365 owin安全插件。我在github上分享了代码。它基于codeplex的katana project。
您可以在https://github.com/chadwjames/wakizashi找到源代码。
您需要注册申请here。注册应用程序时,将回调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包。