public async Task <IActionResult> OnGetAsync() { if (_env.IsProduction()) { return(NotFound()); } var me = await GraphClient.Me.Request() .Select(u => new { u.EmployeeId, u.Surname, u.GivenName, u.Mail }) .GetAsync(); #region Get UserData var userData = new GraphUserJsonData() { EmployeeId = me.EmployeeId, LastName = me.Surname, FirstName = me.GivenName, MailAddress = me.Mail }; // 画面表示用に格納 UserData = userData; #endregion return(Page()); }
private int InsertUser(GraphUserJsonData userData, string systemRoleValue, string slackId) { var ret = -1; try { //call helper & insert data UsersHelper dbHelper = new UsersHelper(_appSettings.Secrets.DbConnectionString); ret = dbHelper.InsertData(userData.EmployeeId, userData.LastName, userData.FirstName, systemRoleValue, slackId); _logger.LogDebug("Result count: {0}", ret); } catch (Exception ex) { _logger.LogError("Error GetSystemRoles: {0}", ex.Message); } return(ret); }
public async Task <IActionResult> OnPost() { // TODO: 入力チェック // TODO: 完了したことがわかる挙動 var insertUserData = new GraphUserJsonData { EmployeeId = Request.Form["UserData.EmployeeId"], LastName = Request.Form["UserData.LastName"], FirstName = Request.Form["UserData.FirstName"], // TODO: 将来的にユーザー登録はアプリのDBに入れる+ADに登録、としたい。ADに登録するときにメールアドレスを使う MailAddress = Request.Form["UserData.MailAddress"] }; var insertSystemRoleValue = Request.Form["SystemRoleValue"]; var slackId = await GetSlackId(insertUserData.MailAddress); InsertUser(insertUserData, insertSystemRoleValue, slackId); return(Page()); }
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) { if (!context.ActionDescriptor.AreaName.Equals(".auth")) { #region ADから情報とる var model = new UserDataModel(host: context.HttpContext.Request.Host) { TenantId = _appSettings.TenantId, ClientId = _appSettings.ClientId, }; // セッションに保存した認証コードおよびアクセストークンを取得する var authenticationCode = context.HttpContext.Session.GetString(Constants.Session.AuthenticationCode); var accessToken = context.HttpContext.Session.GetString(Constants.Session.AccessToken); if (string.IsNullOrEmpty(authenticationCode)) { // codeがなければリクエストする _logger.LogDebug(@"Not have authentication code, redirect to request uri."); #region Request Authorization Code // 許可を求めるスコープ var scopes = string.Join(" ", new List <string>() { Constants.Scope.UserRead, }); _logger.LogDebug(@"Authentication request scopes: ""{0}""", scopes); // 認証後にリダイレクトされたURLに含まれる'state'クエリの値と比べることで、CSRF対策が行える var token = Convert.ToBase64String(Guid.NewGuid().ToByteArray()); context.HttpContext.Session.SetString(Constants.Session.AuthUriToken, token); _logger.LogDebug(@"Session saved: Auth-code request token ""{0}""", token); var redirectUri = model.GetRequestAuthenticationCodeUri(scopes, token); _logger.LogDebug(@"Redirect target uri: ""{0}""", redirectUri.AbsoluteUri); // リダイレクト前に、リクエストパスをセッションに格納 context.HttpContext.Session.SetString(Constants.Session.RequestPath, context.HttpContext.Request.Path.Value); context.Result = new RedirectResult(redirectUri.AbsoluteUri); return; #endregion } else if (string.IsNullOrEmpty(accessToken)) { // codeがある場合はユーザー情報を取得する _logger.LogDebug(@"Having authentication code, get access token."); #region Get AccessToken accessToken = await model.GetAccessTokenAsync(authenticationCode, _appSettings.Secrets.ClientSecret); _logger.LogDebug(@"GetAccessTokenAsync status code: ""{0} {1}""", (int)model.Response.StatusCode, model.Response.StatusCode); _logger.LogDebug(@"Access token: ""{0}""", accessToken); context.HttpContext.Session.SetString(Constants.Session.AccessToken, accessToken ?? "!!!! NO ACCESSTOKEN !!!!"); _logger.LogDebug(@"Session saved: Access token ""{0}""", accessToken); #endregion } _logger.LogDebug(@"Get user data(from MS Graph API)."); #region Get UserData var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((message) => { message.Headers.Authorization = new AuthenticationHeaderValue(JwtBearerDefaults.AuthenticationScheme, accessToken); return(Task.CompletedTask); })); var me = await graphClient.Me.Request() .Select(u => new { u.EmployeeId, u.Surname, u.GivenName, u.Mail }) .GetAsync(); var userData = new GraphUserJsonData() { EmployeeId = me.EmployeeId, LastName = me.Surname, FirstName = me.GivenName, MailAddress = me.Mail }; #endregion #endregion #region テーブルから情報取る UsersHelper dbHelper = new UsersHelper(_appSettings.Secrets.DbConnectionString); UsersData usersTableData = dbHelper.SelectData(userData.EmployeeId); #endregion #region セッションに情報入れる context.HttpContext.Session.SetString(Constants.Session.EmployeeId, usersTableData.EmployeeId); context.HttpContext.Session.SetString(Constants.Session.SystemRoleId, usersTableData.SystemRoleId); #endregion } await next.Invoke(); }