/server/api をログインで保護する

azure static web apps の Eash Authに、トークンストアからidトークンやらアクセストークンを取得する機能はないそうです。代わりに、サーバー要求のヘッダーにログインユーザー情報が格納されるそうです。を確認してみました。

export default defineEventHandler((event) => {
  const header = getHeader(event, 'x-ms-client-principal')   
  if (!header)
    throw createError({ statusCode: 401, statusMessage: "Unauthorized" })

  const encoded = Buffer.from(header, 'base64');
  const decoded = encoded.toString('ascii');
  const clientPrincipal = JSON.parse(decoded)
  if (!clientPrincipal.userRoles!.includes("administrator")) 
    throw createError({ statusCode: 401, statusMessage: "Unauthorized" })

  return {
    api: 'works'
  }
})

getHeaderは、H3 (unjs/h3)のユーティリティです。最初、useRequestHeaderを試しましたが、これは実行時に useRequestHeader is not defined になります。

api側でも無事、ログイン情報を取得することができました。swa cli で実行すればローカルでのテストでも確認することができます。アクセストークンをもらうよりもこっちの方が楽ちんな気もします。Easy Authの実装を信じるしかありません。とにかくこれでEasy Authの検証は終わりです。このブログのようなサイトであれば十分でしょう。

登録:2024-07-26 01:43
更新:2024-07-26 01:48
by nasu38yen
Copyright (C) 2014 Stadio Peace All Rights Reserved.