LoginSignup
28

More than 3 years have passed since last update.

posted at

updated at

【GAS Webアプリ】ホワイトリストを使ってWebページのアクセス制御する

はじめに

Google Apps Scriptを使えばウェブアプリケーションを簡単に作成できる。
Gsuiteのユーザーの場合、[アプリケーションにアクセスできるユーザー]をGsuiteユーザー内で公開できるが、「全員」に公開した場合細かな アクセス制御 がGUIからできないので、それを簡単に実装するコード

スクリーンショット 2019-07-04 16.21.01.png

やり方

前準備

シート1にアクセス権限を管理するデータを入力する。
statusokのユーザのみがアクセスできる。
スクリーンショット 2019-07-04 16.46.52.png

ソースコード

スプレッドシートの[ツール]→[スクリプトエディタ]を開き以下のようにファイルを作成する。
スクリーンショット 2019-07-04 16.26.05.png

index.htmlは表示したいHTMLファイル
error.htmlはアクセス権限の内ユーザーに対するHTMLファイル

※HTMLファイルの中身は自由に変えてもらって大丈夫です。

index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <h1>こんにちは世界!</h1>
  </body>
</html>
error.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
   <h1>アクセス権限のないユーザーです。</h1>
  </body>
</html>
コード.gs
//現在ログインしているユーザーのメールアドレスを取得
LOGIN_USER = Session.getActiveUser().getEmail();

function doGet(e) {
  //ログインしているユーザーのメールアドレスを使ってアクセス権を確認
  if(getUserData(LOGIN_USER).status == 'ok'){
    htmlOutput = HtmlService.createTemplateFromFile("index").evaluate();
  }else{
    htmlOutput = HtmlService.createTemplateFromFile("error").evaluate();
  }

  htmlOutput
  .setTitle('メールアドレスでアクセス権限してみる')
  .addMetaTag('viewport', 'width=device-width, initial-scale=1')

  return htmlOutput
}

//シート名を指定してシートを取得
function getSheetData(sheetName) {
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  var rows = sheet.getDataRange().getValues();
  var keys = rows.splice(0, 1)[0];
  return rows.map(function(row) {
    var obj = {};
    row.map(function(item, index) {
      obj[String(keys[index])] = String(item);
    });
    return obj;
  });
}

//メールアドレスをしていしてユーザーデータを返す
function getUserData(email) {
  var user_data = getSheetData('シート1');

  var user = user_data.filter(function(value) {
    return email == value.email;
  });

  if (user[0] != undefined) {
    return user[0];
  }

  Logger.log('そのメールアドレスに対応するユーザーは存在しません。');
  return {status: 'ng'};
}

[公開]→[ウェブアプリケーションとして導入]を押して、承認画面がいろいろ出てくるので、承認してから
アプリケーションにアクセスできるユーザー全員にすると使えます!
もちろんGsuite内のユーザーの中で更にアクセス制御・制限したい場合でも使えます。

スクリーンショット 2019-07-04 16.35.57.png

お疲れ様です

うまく行けば以下のように表示されるはずです!

うまくいかない場合は アプリケーションのURL末尾が/execになっているか確認してください。 /dev の場合はテストモードなのでスクリプトエディタにアクセスできるユーザーではないとアクセスできません。
スクリーンショット 2019-07-04 16.39.21.png
スクリーンショット 2019-07-04 16.38.41.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
28