Authentication Governance Superbadge Unit



https://trailhead.salesforce.com/content/learn/superbadges/superbadge_governing_authentication_sbu?trail_id=secure-your-environment

+ シングル サインオンおよび多要素認証ユーザーを監査します。
+ 認証監視レポートとダッシュボードを構築します。
+ 同時セッションの電子メール アクションを使用してフローをカスタマイズします。


# SSOおよびMFAユーザーの監査

SSO および MFA に関連する会社のポリシーを確認し、ユーザーを監査し、ユーザー権限に必要な調整を行います。


:::note alert
We can't find the 'MFA_Authorization_Required' permission set assigned to the expected user(s). Be sure to review all users, active and inactive.


想定されるユーザーに割り当てられた「MFA_Authorization_Required」権限セットが見つかりません。アクティブユーザーと非アクティブユーザーの両方を確認してください。
:::

:::note alert
We can't find the 'Single_Sign_On' permission set assigned to the expected users.

:::


# 認証監視レポートの作成

要件に記載されている仕様に従って認証監視レポートを作成します。

:::note alert
We can’t find the expected report named 'Login Attempts by Status'. Make sure there is only one 'Login Attempts by Status' report and it's in the correct folder and has a description.

「ステータス別ログイン試行」というレポートが見つかりません。「ステータス別ログイン試行」レポートが1つだけ存在し、正しいフォルダに保存され、説明が付けられていることを確認してください。
:::

:::note alert
We can't find the expected groupings or display settings for the 'Login Attempts by Status' report.
:::


:::note alert
We can't find the expected groupings or display settings for the 'Failed Login Attempts by User' report.
:::

:::note alert
We can’t find the expected user report named 'Verification Challenges by Method'. Make sure there is only one 'Verification Challenges by Method' report and it is in the correct folder and has a description.


「検証方法別の課題」というユーザーレポートが見つかりません。「検証方法別の課題」レポートが1つだけ存在し、正しいフォルダに保存され、説明が記載されていることを確認してください。
`Kenshō hōhō-be
:::

:::note alert
We can't find the expected groupings or display settings for the 'Verification Challenges by Method' report.

:::

:::note alert
We can’t find the expected report named 'Logins without SSO and MFA'. Make sure there is only one 'Logins without SSO and MFA' report and it's in the correct folder and has a description.

「SSOとMFAを使用しないログイン」というレポートが見つかりません。「SSOとMFAを使用しないログイン」レポートが1つだけ存在し、正しいフォルダに保存され、説明が記載されていることを確認してください。
:::


# 同時セッションの電子メールアクションを構成する

既存の同時ユーザー認証ログインフローを変更し、同時セッションがブロックされるたびにメールを送信するアクションを追加します。有効化されたフローが、標準ユーザーおよびカスタム：セールスプロファイルのログインフローによってトリガーされることを確認します。


:::note alert
We can't find the 'AlertAdmins' send email action in the 'Concurrent_User_Authentication_Login_Flow' flow or it's not configured as expected.


「Concurrent_User_Authentication_Login_Flow」フローに「AlertAdmins」のメール送信アクションが見つからないか、期待どおりに構成されていません。
:::

:::note alert
We can't find the 'Standard User - Concurrent User Authentication Login Flow' login flow with the expected configurations.


期待される構成の「標準ユーザー - 同時ユーザー認証ログインフロー」ログインフローが見つかりません。
:::

# 複数のブラウザで起動させないってこと？


昨年、一部のユーザーがアクセス制限を回避するためにログイン認証情報を共有していることがチームに報告されました。ユーザーがデスクトップとモバイルデバイスの両方でアクティブなセッションを持つことは許容されますが、ユーザーごとに2つ以上の同時セッションを許可する必要はありません。

CNCLの管理者は、開発者の協力を得て、1人のユーザーに対して2つ以上の同時セッションをブロックするフロー「同時ユーザー認証ログインフロー」を構築しました。この新しいフローはテスト済みで、期待通りに動作しています。現在、CNCLのセキュリティチームは、このフローで同時セッションがブロックされるたびにメールを受け取ることを希望しています。


Apexのコード

フローで呼び出せるようにList型で数値を返している感じですね。

```Java
global class CountAuthSession{

    @InvocableMethod(label='Count AuthSession records for a User')
  public static List<SessionCount> getAuthSessions() {
     List<AuthSession> sessions;
       Integer no = 0;
        
        String userid   = UserInfo.getUserId();  
        
        sessions = [Select Id, ParentId, SessionType from AuthSession where UsersId=:userid];
        for (AuthSession s : sessions)
        {
            // Count only parent and non-temp sessions
            if(s.ParentId == null && s.SessionType != 'TempUIFrontdoor' )
            {
                    no++;
            }
        }
          List <SessionCount> sessionCount = new List <SessionCount>();
        SessionCount count = new SessionCount();
        count.no = no;
        sessionCount.add (count);
        return sessionCount;
  }
  global class SessionCount {
        
        @InvocableVariable
        global Integer no;
    }
    
}
```

セッション数を数えて２より小さいとOK？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/9eea9dd0-bf13-456f-867b-4de3c1515410.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e5cd4aee-ee24-4173-92a5-2aed11c33a9b.png)



[AuthSession](https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/sforce_api_objects_authsession.htm)

AuthSession オブジェクトは、組織の個々のユーザーセッションを表します。このオブジェクトはバージョン 29.0 以降で使用できます。

ParentId : 親セッションが存在する場合は (現在のセッションがキャンバスアプリケーション用の場合など)、その 18 文字の ID。現在のセッションに親がない場合、この値は現在のセッション自体の ID になります。

Nullになるのかな？

Nullもあるなぁ、説明が違うのか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e5bea35f-46f8-471e-8b89-a90246bc1e4f.png)



SessionType : セッションの種別。一般的なものは UI、コンテンツ、API、Visualforce です。