#region
using System;
using System.Threading.Tasks;
using
System.Web.WebPages;
using
Microsoft.Azure.ActiveDirectory.GraphClient;
using
Microsoft.IdentityModel.Clients.ActiveDirectory;
using
System.Web;
using
satya.Models;
#endregion
namespace
satyya.Utils
{
internal class AuthenticationHelper
{
public static string
TokenForUser;
/// <summary>
/// Get Token
for Application.
/// </summary>
/// <returns>Token for
application.</returns>
public static ActiveDirectoryClient
GetActiveDirectoryClientAsApplication(HttpSessionStateBase session)
{
Uri
servicePointUri = new Uri(Constants.ResourceUrl);
Uri
serviceRoot = new Uri(servicePointUri, Constants.TenantId);
ActiveDirectoryClient
activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
async () => await
AcquireTokenAsyncForApplication(session));
return
activeDirectoryClient;
}
public static async Task<string> AcquireTokenAsyncForApplication(HttpSessionStateBase session)
{
AuthenticationResult token = null;
if (session
!= null && session["token"] != null)
{
token = session["token"] as AuthenticationResult;
}
AuthenticationResult
authenticationResult = null;
var futureTime
= DateTimeOffset.UtcNow.AddMinutes(2);
// Fetch a token if it
has not been fetched earlier or if the token is about to expire in 2 mins
if (token == null ||
(futureTime.UtcDateTime > token.ExpiresOn.UtcDateTime))
{
AuthenticationContext
authenticationContext = new AuthenticationContext(Constants.AuthString,
false);
// Config for OAuth
client credentials
ClientCredential clientCred
= new ClientCredential(Constants.ClientId, Constants.ClientSecret);
authenticationResult = await
authenticationContext.AcquireTokenAsync(Constants.ResourceUrl,
clientCred);
token = authenticationResult;
if (session
!= null)
{
session["token"] =
authenticationResult;
}
}
if (token == null)
{
return null;
}
// Configure a
AADJWTToken using the ADAL token
var aadToken =
new AADJWTToken();
aadToken.AdalToken = token;
aadToken.AccessToken =
token.AccessToken;
aadToken.TokenType =
token.AccessTokenType;
return
token.AccessToken;
}
/// <summary>
/// Async task
to acquire token for User.
/// </summary>
/// <returns>Token for
user.</returns>
public static async Task<string>
AcquireTokenAsyncForUser()
{
return
GetTokenForUser();
}
/// <summary>
/// Get Token
for User.
/// </summary>
/// <returns>Token for
user.</returns>
public static string
GetTokenForUser()
{
if
(TokenForUser == null)
{
var
redirectUri = new Uri("https://localhost");
AuthenticationContext
authenticationContext = new AuthenticationContext(Constants.AuthString,
false);
AuthenticationResult
userAuthnResult = authenticationContext.AcquireToken(Constants.ResourceUrl,
Constants.ClientId,
redirectUri, PromptBehavior.Always);
TokenForUser = userAuthnResult.AccessToken;
Console.WriteLine("\n
Welcome " + userAuthnResult.UserInfo.GivenName + " " +
userAuthnResult.UserInfo.FamilyName);
}
return
TokenForUser;
}
/// <summary>
/// Get Active
Directory Client for User.
/// </summary>
/// <returns>ActiveDirectoryClient
for User.</returns>
public static ActiveDirectoryClient
GetActiveDirectoryClientAsUser()
{
Uri
servicePointUri = new Uri(Constants.ResourceUrl);
Uri
serviceRoot = new Uri(servicePointUri, Constants.TenantId);
ActiveDirectoryClient
activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
async () => await
AcquireTokenAsyncForUser());
return
activeDirectoryClient;
}
}
}
Next got to Controller
#region Azure AD
// Create New User
ActiveDirectoryClient
activeDirectoryClient;
activeDirectoryClient = AuthenticationHelper.GetActiveDirectoryClientAsApplication(this.HttpContext.Session);
IUser
userToBeAdded = new User();
Session["DomainNames"] = "satya.co";
userToBeAdded.DisplayName =
registerlogin.User_First_Name;
userToBeAdded.UserPrincipalName =
registerlogin.User_EmailId.Replace("@", "_") + "@" + Session["DomainNames"].ToString();
//userToBeAdded.UserPrincipalName
= mail1.Replace("@", "_") + "@" +
Session["DomainNames"].ToString();
userToBeAdded.AccountEnabled = true;
userToBeAdded.MailNickname =
registerlogin.User_Last_Name;
userToBeAdded.Country =
registerlogin.User_CountryName;
userToBeAdded.State =
registerlogin.User_StateName;
userToBeAdded.PasswordProfile = new PasswordProfile
{
Password =
registerlogin.User_Password,
ForceChangePasswordNextLogin = true
};
userToBeAdded.UsageLocation = "US";
await
activeDirectoryClient.Users.AddUserAsync(userToBeAdded);
if
(userToBeAdded.DisplayName != "")
{
if
(userToBeAdded.ObjectId != null)
{
}
}
For Login
activeDirectoryClient = AuthenticationHelper.GetActiveDirectoryClientAsApplication(this.HttpContext.Session);
IUser users =
activeDirectoryClient.Users.Where(d => d.UserPrincipalName == Convert.ToString(principalName)).ExecuteSingleAsync().Result;
User user = (User)users;
No comments:
Post a Comment