2024年9月30日月曜日

Ruby-SAMLの脆弱性(XML署名ラッピング攻撃)

こんにちは、富士榮です。

XML署名ラッピングによるRuby-SAMLの脆弱性が報告されていますね。


CVE-2024-45409としても登録されています。

内容としては割とオーソドックスなXML署名の実装の問題っぽいですね。

XML署名の特徴としてJWSとは違いドキュメント全体ではなく要素を指定して署名をおこなうことができる点、署名された値そのものも当該XMLの内部に埋め込まれることが挙げられます。
今回は部分的な署名を行うことができるという点について悪用された感じですね。上記の例で言うと、真ん中にあるalice@customer.comの値を含むid=dead[....]beefの部分に対して署名値が生成される一方で、攻撃者が偽の値をXML内に埋め込んだ同じid=dead[...]beefの部分は署名されない、ということが起きてしまうわけです。

この攻撃は2012年にJPCERTが以下のペーパーを出していたり、と過去もしばしば起きている話なので、実装する際は先人の知恵に頼りながらやっていけるといいでしょう。
参考)JPCERTの資料



2024年9月29日日曜日

dockがmDLのWebinarをやるようです

こんにちは、富士榮です。

パスポートや免許証のApple Wallet/Google Walletへの格納の話も多く、世の中はすっかりmDoc祭りですね。

そんな中、各社も色々イベントやセミナーを仕掛けてきているわけですが、VCやWalletの界隈ではそろそろ老舗?になりつつあるdockもmDLに関するWebinarをやるようです。



13 US states have already rolled out mobile digital driver's licenses (mDLs), and many more are testing the waters. Why the buzz? These government-issued digital IDs promise game-changing benefits: enhanced privacy, smoother online transactions, and a streamlined process for everything from opening a bank account to securing a loan.
So, here's the real question: how will mDLs transform remote ID verification?

米国ではすでに13の州でモバイル・デジタル運転免許証(mDL)が導入され、さらに多くの州で試験運用が行われている。なぜ話題になっているのか?これらの政府発行のデジタルIDは、プライバシーの強化、よりスムーズなオンライン取引、銀行口座の開設からローンの確保までの合理化されたプロセスなど、ゲームチェンジャー的なメリットを約束している。

mDLは遠隔地でのID認証にどのような変革をもたらすのだろうか?

なかなか興味深いですね。

例によって日本時間だと10月3日(木)AM1:00-という酷い時間ですが、興味のある方は参加してみると米国の様子などわかるかもしれませんね。



2024年9月28日土曜日

AuthZENのAuthorization APIとは(5)

こんにちは、富士榮です。

AuthZEN WGが策定しているAuthorization API 1.0 draftを引き続き見ていきます。

最後はTransportです。

7. Transport

This specification defines an HTTPS binding which MUST be implemented by a compliant PDP.
Additional transport bindings (e.g. gRPC) MAY be defined in the future in the form of profiles, and MAY be implemented by a PDP.

7.トランスポート

この仕様は、準拠した PDP によって実装されなければならない HTTPS バインディングを定義します
追加のトランスポートバインディング (例: gRPC) は、将来プロファイルの形式で定義され、PDP によって実装される可能性があります

設計思想としてTransport Agnosticにしているのはいいことだと思います。今回は手始めにHTTPSバインディングからスタートしますが、将来的にgRPCなどへもバインドされる可能性はありますね。むしろIoT文脈なども考えるならOver BLEとかも出てくるかもしれません。

7.1. HTTPS Binding
7.1.1. HTTPS Access Evaluation Request

The Access Evaluation Request is an HTTPS request with content-type of application/json. Its body is a JSON object that contains the Access Evaluation Request, as defined in Section 6.1.

The following is a non-normative example of the HTTPS binding of the Access Evaluation Request:

7.1. HTTPSバインディング
7.1.1. HTTPSアクセス評価リクエスト

content-type、のHTTPS リクエストです。その本体は、セクション 6.1application/jsonで定義されているアクセス評価リクエストを含む JSON オブジェクトです。

以下は、アクセス評価リクエストの HTTPS バインディングの非規範的な例です: 

POST /access/v1/evaluation HTTP/1.1
Host: pdp.mycompany.com
Authorization: Bearer <myoauthtoken>
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "subject": {
    "type": "user",
    "id": "alice@acmecorp.com"
  },
  "resource": {
    "type": "todo",
    "id": "1",
  },
  "action": {
    "name": "can_read"
  },
  "context": {
    "time": "1985-10-26T01:22-07:00"
  }
}
Figure 14: Example of an HTTPS Access Evaluation Request

まずはリクエストをOver HTTPSで実装する例です。

まぁ、POSTでしょうね。アクセストークンでの保護も重要なポイントです。別途Security Considerationでも今後議論されると思いますが、ここではPEPからのリクエストに対する攻撃(盗聴、置き換えや改ざんなど)が一番の考慮事項になると思います。単純にSubjectのロールやResourceなどを置き換えてしまうことでアクセス制御をバイパスできてしまうとまずいわけです。(現状のSecurity Considerationはまだ薄っぺらいのでもうちょっと詰めないとダメな気がしています。一応Sender Constraintについては触れられてはいますが)

7.1.2. Access Evaluation HTTPS Response

The success response to an Access Evaluation Request is an Access Evaluation Response. It is an HTTPS response with a status code of 200, and content-type of application/json. Its body is a JSON object that contains the Access Evaluation Response, as defined in Section 6.2.

Following is a non-normative example of an HTTPS Access Evaluation Response:

7.1.2.アクセス評価 HTTPS レスポンス

アクセス評価リクエストに対する成功応答は、アクセス評価応答です。statusが200でcontent-typeはapplication/jsonのHTTPS応答です。ボディはセクション 6.2で定義されているアクセス評価応答を含む JSON オブジェクトです。

以下は、HTTPS アクセス評価応答の非規範的な例です: 

HTTP/1.1 OK
Content-type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716

{
  "decision": true
}
Figure 15: Example of an HTTPS Access Evaluation Response

ここは前回書いた通りtrue/falseだけでいいのか問題は置いておいて、普通かと。

7.1.3. Error Responses

The following error responses are common to all methods of the Authorization API. The error response is indicated by an HTTPS status code (Section 15 of [RFC9110]) that indicates error.

The following errors are indicated by the status codes defined below:

7.1.3.エラー応答

以下のエラー応答は、Authorization API のすべてのメソッドに共通です。エラー応答は、RFC9110セクション15に定義されているHTTPS ステータス コード によって識別されます。

以下のエラーは、以下に定義されているステータス コードによって示されます

Table 1HTTPS Error status codes
CodeDescriptionHTTPS Body Content
400Bad RequestAn error message string
401UnauthorizedAn error message string
403ForbiddenAn error message string
500Internal errorAn error message string

Note: HTTPS errors are returned by the PDP to indicate an error condition relating to the request or its processing, and are unrelated to the outcome of an authorization decision, which is always returned with a 200 status code and a response payload.

To make this concrete: * a 401 HTTPS status code indicates that the caller (policy enforcement point) did not properly authenticate to the PDP - for example, by omitting a required Authorization header, or using an invalid access token. * the PDP indicates to the caller that the authorization request is denied by sending a response with a 200 HTTPS status code, along with a payload of { "decision": false }.

注: HTTPS エラーは、リクエストまたはその処理に関連するエラー状態を示すために PDP によって返され、200ステータス コードと応答ペイロードとともに常に返される承認決定の結果とは無関係です

具体的には、次のようになります。 * 401HTTPS ステータス コードは、呼び出し元 (ポリシー適用ポイント) が PDP に対して適切に認証しなかったことを示します (必要なヘッダーを省略した、無効なアクセス トークンを使用したなど)。 * PDP は、 HTTPS ステータス コード200とペイロード{ "decision": false }を含むAuthorization応答を送信することで、呼び出し元に認可要求が拒否されたことを示します

注釈にもある通り、あくまでリクエストに対するHTTPSのステータスを示すレスポンスなので、認可決定に関するtrue/falseとは関係ないことに注意です。

7.1.4. Request Identification

All requests to the API MAY have request identifiers to uniquely identify them. The API client (PEP) is responsible for generating the request identifier. If present, the request identifier SHALL be provided using the HTTPS Header X-Request-ID. The value of this header is an arbitrary string. The following non-normative example describes this header:

7.1.4.リクエストの識別

API へのすべてのリクエストには、リクエストを一意に識別するためのリクエスト識別子が含まれる場合があります。API クライアント (PEP) は、リクエスト識別子を生成する責任があります。存在する場合、リクエスト識別子は HTTPS ヘッダーを使用して提供される必要がありますX-Request-ID。このヘッダーの値は任意の文字列です。次の非規範的な例は、このヘッダーについて説明しています: 

POST /access/v1/evaluation HTTP/1.1
Authorization: Bearer mF_9.B5f-4.1JqM
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716
Figure 16: Example HTTPS request with a Request Id Header

実装する際は、ここに記載されているリクエストの識別が結構重要なんじゃないかと思います。先に書いた通り、アクセス許可する・しないの非常に重要な決定を含む話なので、しっかりとステータスを管理しておく責任がPEP/PDPの両方にあると思います。

7.1.5. Request Identification in a Response

A PDP responding to an Authorization API request that contains an X-Request-ID header MUST include a request identifier in the response. The request identifier is specified in the HTTPS Response header: X-Request-ID. If the PEP specified a request identifier in the request, the PDP MUST include the same identifier in the response to that request.

The following is a non-normative example of an HTTPS Response with this header:

7.1.5.レスポンスにおけるリクエストの識別

ヘッダーを含む Authorization API リクエストに応答する PDP はX-Request-ID、レスポンスにリクエスト識別子を含める必要があります。リクエスト識別子は、HTTPS レスポンス ヘッダー(X-Request-ID)で指定されます。PEP がリクエストにリクエスト識別子を指定した場合、PDP はそのリクエストへのレスポンスに同じ識別子を含める必要があります

以下は、このヘッダーを含む HTTPS レスポンスの非標準的な例です: 

HTTP/1.1 OK
Content-type: application/json
X-Request-ID: bfe9eb29-ab87-4ca3-be83-a1d5d8305716
Figure 17Example HTTPS response with a Request Id Header

先に書いた通り、ちゃんとリクエストとレスポンスが紐づいていることを管理することは重要ですね。


ということで現時点のdraftはこんなところです。

非常にシンプルな仕様になっているので実装も簡単だと思いますが、今後のポイントは以下にしてActionやResourceを標準化していくのか、そして実装をどこまで増やすか、というところにかかってくると思います。メガSaaSな人たちが実装してくれるといいんですけどね。

まぁ、引き続き様子は気にしていきたいと思います。


2024年9月27日金曜日

AuthZENのAuthorization APIとは(4)

こんにちは、富士榮です。

引き続きAuthZEN WGのAuthorization API 1.0のdraftを見ていきます。

今回はいよいよPEP(ポリシー実施ポイント)とPDP(ポリシー決定ポイント)の間のAPI仕様の部分です。

6. Access Evaluation API

The Access Evaluation API defines the message exchange pattern between a client (PEP) and an authorization service (PDP) for executing a single access evaluation.

6.アクセス評価API

アクセス評価 API は、単一のアクセス評価を実行するためのクライアント (PEP) と認可サービス (PDP) 間のメッセージ交換パターンを定義します

 まずはリクエストからです。

6.1. The Access Evaluation API Request

The Access Evaluation request is a 4-tuple constructed of the four previously defined entities:

  • subject: REQUIRED. The subject (or principal) of type Subject
  • action: REQUIRED. The action (or verb) of type Action.
  • resource: REQUIRED. The resource of type Resource.
  • context: OPTIONAL. The context (or environment) of type Context.

6.1.アクセス評価APIリクエスト

アクセス評価リクエストは、以前に定義された4つのエンティティから構成される4つのタプルです: 

  • subject: 必須。Subject 型のサブジェクト(またはプリンシパル)
  • action: 必須。アクション型のアクション(または動詞)
  • resource: 必須。リソースタイプのリソース
  • context: オプション。Context 型のコンテキスト (または環境) 

{
  "subject": {
    "type": "user",
    "id": "alice@acmecorp.com"
  },
  "resource": {
    "type": "account",
    "id": "123"
  },
  "action": {
    "name": "can_read",
    "properties": {
      "method": "GET"
    }
  },
  "context": {
    "time": "1985-10-26T01:22-07:00"
  }
}
Figure 9Example Request

データセットは前回見てきた通りですね。

誰(subject)が何(resource)に対して何を(action)ができるかを問い合わせるわけですね。上記の例だとalice@acmecorp.comという主体が123というアカウントの情報を読み取ることができるか?ということを問い合わせています。もちろんコンテキストの情報も判断基準になります。

次はレスポンスです。

6.2. The Access Evaluation API Response

The simplest form of a response is simply a boolean representing a Decision, indicated by a "decision" field.

decision: REQUIRED. A boolean value that specifies whether the Decision is to allow or deny the operation.

In this specification, assuming the evaluation was successful, there are only 2 possible responses:

  • true: The access request is permitted to go forward.
  • false: The access request is denied and MUST NOT be permitted to go forward.

The response object MUST contain this boolean-valued Decision key.

6.2.アクセス評価APIレスポンス

応答の最も単純な形式は、decisionフィールドによって示される決定を表すブール値です

decision: 必須。Decision が操作を許可するか拒否するかを指定するブール値

この仕様では、評価が成功したと仮定すると、可能な応答は2つだけです: 

  • true: アクセス要求は続行が許可されます
  • false: アクセス要求は拒否され、続行を許可してはなりません

レスポンスオブジェクトには、このブール値の Decision キーが含まれている必要があります

{
  "decision": true
}
Figure 10: Example Decision

決定された結果がdecisionとしてtrue/falseで返却されるわけですね。

前回のデータセットのactionの部分でcan_readなどはリクエストに使ってレスポンスは単純にbooleanで返すわけです。まぁシンプルではありますが、リクエストのactionのパターンをどこまで標準として定義できるかどうか?にかかってきそうです。

6.2.2. Additional Context in a Response

In addition to a "decision", a response may contain a "context" field which can be any JSON object. This context can convey additional information that can be used by the PEP as part of the decision evaluation process. Examples include:

  • XACML's notion of "advice" and "obligations"
  • Hints for rendering UI state
  • Instructions for step-up authentication

6.2.2.レスポンス内の追加コンテキスト

"decision"に加えて、レスポンスには任意の JSON オブジェクトの"context"フィールドが含まれる場合があります。このコンテキストは、PEP が意思決定評価プロセスの一部として使用できる追加情報を伝えることができます。例: 

  • XACML の「アドバイス」と「義務」の概念
  • UI 状態をレンダリングするためのヒント
  • ステップアップ認証の手順

 responseには追加の情報を含めることができるんですね。これによりPEP側でとるべきアクションをある程度標準として定義しておくことができそうです。

6.2.3. Example Context

An implementation MAY follow a structured approach to "context", in which it presents the reasons that an authorization request failed.

  • A list of identifiers representing the items (policies, graph nodes, tuples) that were used in the decision-making process.
  • A list of reasons as to why access is permitted or denied.

6.2.3.コンテキストの例

実装は、認可リクエストが失敗した理由を提示する"context"に対する構造化されたアプローチに従っても良い 

  • 意思決定プロセスで使用された項目 (ポリシー、グラフ ノード、タプル) を表す識別子のリスト 
  • アクセスが許可または拒否される理由のリスト

要するに単にtrue/falseの結果だけではなく理由などの情報をレスポンスに含めることができるということですね。

6.2.3.1. Reasons

Reasons MAY be provided by the PDP.

6.2.3.1.1. Reason Field

A Reason Field is a JSON object that has keys and values of type string. The following are non-normative examples of Reason Field objects:

6.2.3.1.理由

理由は PDP によって提供される場合があります

6.2.3.1.1.理由フィールド

Reason フィールドは、String型のキーと値を持つ JSON オブジェクトです。以下は、Reason フィールド オブジェクトの非規範的な例です: 

{
  "en": "location restriction violation"
} 

Figure 11: Example Reason 

主に失敗の場合の理由の提供方法ですね。

6.2.3.1.2. Reason Object

A Reason Object specifies a particular reason. It is a JSON object that has the following fields:

  • id: REQUIRED. A string value that specifies the reason within the scope of a particular response.
  • reason_admin: OPTIONAL. The reason, which MUST NOT be shared with the user, but useful for administrative purposes that indicates why the access was denied. The value of this field is a Reason Field object (Section 6.2.3.1.1).
  • reason_user: OPTIONAL. The reason, which MAY be shared with the user that indicates why the access was denied. The value of this field is a Reason Field object (Section 6.2.3.1.1).

The following is a non-normative example of a Reason Object:

6.2.3.1.2.理由オブジェクト

Reason オブジェクトは特定の理由を指定します。これは次のフィールドを持つ JSON オブジェクトです: 

  • id: 必須。特定の応答の範囲内で理由を指定する文字列値
  • reason_admin: オプション。ユーザーと共有してはならない理由ですが、アクセスが拒否された理由を示す管理目的に役立ちます。このフィールドの値は、Reason Field オブジェクト (セクション 6.2.3.1.1 )です
  • reason_user: オプション。アクセスが拒否された理由をユーザーと共有する場合があります。このフィールドの値は、Reason Field オブジェクト (セクション 6.2.3.1.1 )です

以下は、Reason オブジェクトの非規範的な例です: 

{
  "id": "0",
  "reason_admin": {
    "en": "Request failed policy C076E82F"
  },
  "reason_user": {
    "en-403": "Insufficient privileges. Contact your administrator",
    "es-403": "Privilegios insuficientes. Póngase en contacto con su administrador"
  }
}
Figure 12Example of a Reason Object
{
  "decision": true,
  "context": {
    "id": "0",
    "reason_admin": {
      "en": "Request failed policy C076E82F"
    },
    "reason_user": {
      "en-403": "Insufficient privileges. Contact your administrator",
      "es-403": "Privilegios insuficientes. Póngase en contacto con su administrador"
    }
  }
}
Figure 13Example Response with Context

理由は割と詳しく書くことができるようです。

ただ現状はここまでしか定義がないので、実際に中身の書き方をどうするか、や言語セットのデフォルトの扱いをどうするのか、、などはこれから決めていかないといけないと思います。


ということでAPI仕様はここまでです。

次回はTransportです。

2024年9月26日木曜日

AuthZENのAuthorization APIとは(3)

こんにちは、富士榮です。

引き続きAuthZEN WGのAuthorization API 1.0のdraftを見ていきます。

https://openid.net/specs/authorization-api-1_0-01.html


今回はAPIが扱うデータモデルについてです。

5. Information Model

The information model for requests and responses include the following entities: Subject, Action, Resource, Context, and Decision. These are all defined below.

5.情報モデル

リクエストとレスポンスの情報モデルには、サブジェクト、アクション、リソース、コンテキスト、決定というエンティティが含まれます。これらはすべて以下で定義されています

前回の概要で述べた通り、Authorization APIはPEP(ポリシー実施ポイント)からの問い合わせを受けて認可に関する判定結果を返却するPDP(ポリシー決定ポイント)として機能します。そのため、対象となるサブジェクト(主体)、認可されるアクション(操作)、認可対象となるリソース、コンテキスト、決定結果を含むことになります。


5.1. Subject

A Subject is the user or robotic principal about whom the Authorization API is being invoked. The Subject may be requesting access at the time the Authorization API is invoked.

A Subject is a JSON ([RFC8259]) object that contains two REQUIRED keys, type and id, which have a value typed string, and an OPTIONAL key, properties, with a value of a JSON object.

type:

REQUIRED. A string value that specifies the type of the Subject.

id:

REQUIRED. A string value containing the unique identifier of the Subject, scoped to the type.

properties:

OPTIONAL. A JSON object containing any number of key-value pairs, which can be used to express additional properties of a Subject.

The following is a non-normative example of a Subject:

5.1.主体

サブジェクトとは、Authorization API が呼び出されるユーザーまたはロボット プリンシパルです。サブジェクトは、Authorization API が呼び出された時点でアクセスを要求している可能性があります

サブジェクトは、文字列の値を持つ2つの必須キー(typeとid)と、オプションとしてJSONオブジェクトの値を持つpropertiesを含むJSONオブジェクトです

type:

必須。Subjectstringのタイプを指定する値

id:

必須。stringにスコープ設定された、Subject の一意の識別子を含むtype。¶

properties:

オプション。任意の数のキーと値のペアを含む JSON オブジェクト。これを使用して、Subject の追加プロパティを表現することができます 

以下は、Subject の非規範的な例です: 

{
  "type": "user",
  "id": "alice@acmecorp.com"
}
Figure 1Example Subject


まぁ、単純に対象となる主体を表す部分ですね。ポイントはtype属性があり、この例のようにユーザを示す以外にも汎用的な用途とすることが想定されています。

5.1.1. Subject Properties

Many authorization systems are stateless, and expect the client (PEP) to pass in any properties or attributes that are expected to be used in the evaluation of the authorization policy. To satisfy this requirement, Subjects MAY include zero or more additional attributes as key-value pairs, under the properties object.

An attribute can be single-valued or multi-valued. It can be a primitive type (string, boolean, number) or a complex type such as a JSON object or JSON array.

The following is a non-normative example of a Subject which adds a string-valued department property:

5.1.1.主題のプロパティ

多くの認可システムはステートレスであり、認可ポリシーの評価で使用されることが予想されるプロパティまたは属性をクライアント (PEP) が渡すことを期待しています。この要件を満たすために、サブジェクトはpropertiesオブジェクトの下に 0 個以上の追加属性をキーと値のペアとして含めることができます

属性は単一値または複数値にすることができます。プリミティブ型 (文字列、ブール値、数値) または JSON オブジェクトや JSON 配列などの複合型にすることができます

以下は、文字列値のdepartmentプロパティを追加する Subject の非規範的な例です

{
  "type": "user",
  "id": "alice@acmecorp.com",
  "properties": {
    "department": "Sales"
  }
}
Figure 2Example Subject with Additional Property


PEPからのリクエストに応じて認可決定をするわけなので、そのために必要となる主体に関する情報が欲しいわけです。この例では部署属性をもらっているわけですね。まぁ、本当に難しいのはPEPとPDPでこのpropertiesの中身の値について標準化・同意をとっておくこと、そしてマスターデータが最新状態として同期されていることなのですが。

その意味で相互運用性を保つために幾つかのpropertiesはあらかじめ定義をしておこうとしています。

5.1.1.1. IP Address

The IP Address of the Subject, identified by an ip_address field, whose value is a textual representation of an IP Address, as defined in Textual Conventions for Internet Network Addresses [RFC4001].

The following is a non-normative example of a subject which adds the ip_address property:

5.1.1.1. IPアドレス

サブジェクトのIPアドレス。フィールドによって識別され、その値は[ RFC4001 ]で定義されているIPアドレステキスト表現です。

以下は、ip_addressプロパティを追加するサブジェクトの非規範的な例です: 

{
  "type": "user",
  "id": "alice@acmecorp.com",
  "properties": {
    "department": "Sales",
    "ip_address": "172.217.22.14"
  }
}
Figure 3: Example Subject with IP Address

最初の例がIPアドレスになっているのはよくわかりませんが、ゼロトラストの文脈におけるコンテキストを表現するためにはどのネットワークからの認可要求なのか、は想定されるべき要件だと思います。

5.1.1.2. Device ID

The Device Identifier of the Subject, identified by a device_id field, whose value is a string representation of the device identifier.

The following is a non-normative example of a subject which adds the device_id property:

5.1.1.2.デバイスID

サブジェクトのデバイス識別子。device_idフィールドによって識別され、その値はデバイス識別子の文字列表現です

以下は、device_idプロパティを追加するサブジェクトの非規範的な例です: 

{
  "type": "user",
  "id": "alice@acmecorp.com",
  "properties": {
    "department": "Sales",
    "ip_address": "172.217.22.14",
    "device_id": "8:65:ee:17:7e:0b"
  }
}
Figure 4: Example Subject with Device ID

やっぱりゼロトラストをかなり意識した作りになっている感じがしますね。

次はリソースの話です。

5.2. Resource

A Resource is the target of an access request. It is a JSON ([RFC8259]) object that is constructed similar to a Subject entity. It has the follow keys:

type:

REQUIRED. A string value that specifies the type of the Resource.

id:

REQUIRED. A string value containing the unique identifier of the Resource, scoped to the type.

properties:

OPTIONAL. A JSON object containing any number of key-value pairs, which can be used to express additional properties of a Resource.

5.2.リソース

リソースはアクセス要求の対象です。これは、Subject エンティティと同様に構築された JSON オブジェクトです。次のキーがあります: 

type:

必須。stringリソースのタイプを指定する値

id:

必須。stringリソースの一意の識別子を含む値type。

properties:

オプション。任意の数のキーと値のペアを含む JSON オブジェクト。これを使用して、リソースの追加プロパティを表現することができます

こちらもサブジェクトと同じような構造ですね。

5.2.1. Examples (non-normative)

The following is a non-normative example of a Resource with a type and a simple id:

5.2.1.例(非規範的)

type以下は、と単純なを持つリソースの非規範的な例ですid: 

{
  "type": "book",
  "id": "123"
}
Figure 5Example Resource

5.1のサブジェクトのところとExampleの章立て構造が異なるので若干読みづらさを感じますが、この辺りは今後のUpdateに期待というところです。

The following is a non-normative example of a Resource containing a library_record property, that is itself a JSON object:

library_record以下は、それ自体が JSON オブジェクトであるプロパティを含むリソースの非規範的な例です

{
  "type": "book",
  "id": "123",
  "properties": {
    "library_record":{
      "title": "AuthZEN in Action",
      "isbn": "978-0593383322"
    }
  }
}
Figure 6Example Resource with Additional Property

認可対象となるリソースの表現についてもpropertiesで細かく制御ができるようになっています。ただ、ここでいきなり本のサンプル??って思うところもあるのでゼロトラスト文脈でサンプルは統一した方がわかりやすいんじゃないかな?とは思いました。

5.3. Action

An Action is the type of access that the requester intends to perform.

Action is a JSON ([RFC8259]) object that contains a REQUIRED name key with a string value, and an OPTIONAL properties key with a JSON object value.

name:

REQUIRED. The name of the Action.

properties:

OPTIONAL. A JSON object containing any number of key-value pairs, which can be used to express additional properties of an Action.

The following is a non-normative example of an action:

5.3.アクション

アクションは、リクエスト者が実行しようとしているアクセスのタイプです

アクションは、値を持つ必須のキーと、JSON オブジェクト値を持つオプションのキーを含むJSON オブジェクトです

name:

必須。アクションの名前

properties:

オプション。任意の数のキーと値のペアを含む JSON オブジェクト。アクションの追加プロパティを表現するために使用できます

以下はアクションの非規範的な例です:  

{
  "name": "can_read"
}
Figure 7Example Action


まぁ、単純にどんなアクションが許可されるのか?という表現ですね。

ここも値の標準化が肝要なところですので、ある程度決めうちで標準化しようとしています。

5.3.1. Common Action Values

Since many services follow a Create-Read-Update-Delete convention, a set of common Actions are defined. That said, an Action may be specific to the application being accessed or shared across applications but not listed in the common Actions below.

The following common Actions are defined:

  • can_access: A generic Action that could mean any type of access. This is useful if the policy or application is not interested in different decisions for different types of Actions.
  • can_create: The Action to create a new entity, which MAY be defined by the resource field in the request.
  • can_read: The Action to read the content. Based on the Resource being accessed, this could mean a list functionality or reading an individual Resource's contents.
  • can_update: The Action to update the content of an existing Resource. This represents a partial update or an entire replacement of an entity that MAY be identified by the Resource in the request.
  • can_delete: The Action to delete a Resource. The specific entity MAY be identified by the Resource in the request.

PDP Policies MAY incorporate common Action names to provide different decisions based on the Action.

5.3.1.共通アクション値

多くのサービスは作成、読み取り、更新、削除の規則に従うため、一連の共通アクションが定義されています。ただし、アクションはアクセスされるアプリケーションに固有のものである場合や、アプリケーション間で共有される場合もありますが、以下の共通アクションにはリストされていません

以下の共通アクションが定義されています: 

  • can_access: あらゆるタイプのアクセスを意味する可能性のある汎用アクション。これは、ポリシーまたはアプリケーションが、異なるタイプのアクションに対して異なる決定を行う必要がない場合に便利です
  • can_create: 新しいエンティティを作成するアクション。resourceリクエスト内のフィールドによって定義される場合があります
  • can_read: コンテンツを読み取るアクション。アクセスされるリソースに基づいて、これはリスト機能または個々のリソースのコンテンツの読み取りを意味する場合があります
  • can_update: 既存のリソースのコンテンツを更新するアクション。これは、リクエスト内のリソースによって識別される可能性のあるエンティティの部分的な更新または全体の置き換えを表します
  • can_delete: リソースを削除するアクション。特定のエンティティは、リクエスト内のリソースによって識別される場合があります

PDP ポリシーには、アクションに基づいて異なる決定を提供するために共通のアクション名が組み込まれる場合があります 

共通の値として手始めにCRUD(Create/Read/Update/Delete)を中心に設計をしているようですが、PEPからのリクエスト方法にも依存しそうです。単にアクセス権を教えて、と言われたらcan_readという回答になる可能性はありますが、更新可能?っと聞かれたらtrue/falseで回答した方が特にエッジの機器を考えると軽量で済む気もします。

この辺りはフィードバックしてもいいのかもしれません。

5.4. Context

The Context object is a set of attributes that represent environmental or contextual data about the request such as time of day. It is a JSON ([RFC8259]) object.

The following is a non-normative example of a Context:

 5.4.コンテキスト

Context オブジェクトは、時刻などのリクエストに関する環境またはコンテキストデータを表す属性のセットです。これは JSON オブジェクトです

以下はコンテキストの非規範的な例です: 

{
  "time": "1985-10-26T01:22-07:00"
}
Figure 8Example Context

うーん、ABACを考えるとコンテキストは非常に重要なんですが、5.1でサブジェクトのpropertiesとして設定する部分とコンテキストに指定する部分の切り分けが難しくなってしまっているような気がします。IPアドレスやデバイスIDなどは上記の例の時間と合わせて動的に変化しうる環境属性と言える場合もあるので、コンテキストに入れた方が良いのではないかと個人的には思います。

この辺もフィードバックかもしれません。


ということで、今回はデータモデルの部分について読んでいきました。この後はAPIそのものについて見ていきます。





 

2024年9月25日水曜日

AuthZENのAuthorization APIとは(2)

こんにちは、富士榮です。

では、Authorization APIのImplementer's draftを見ていきましょう。


とりあえず前段部分を見ていきます。

Abstract

The Authorization API enables Policy Decision Points (PDPs) and Policy Enforcement Points (PEPs) to communicate authorization requests and decisions to each other without requiring knowledge of each other's inner workings. The Authorization API is served by the PDP and is called by the PEP. The Authorization API includes an Evaluation endpoint, which provides specific access decisions. Other endpoints may be added in the future for other scenarios, including searching for subjects or resources.

概要

Authorization API により、ポリシー決定ポイント (PDP) とポリシー適用ポイント (PEP) は、互いの内部動作を知らなくても、認​​可要求と決定を相互に通信できます。Authorization API は PDP によって提供され、PEP によって呼び出されます。Authorization API には、特定のアクセス決定を提供する評価エンドポイントが含まれています。将来的には、サブジェクトやリソースの検索など、他のシナリオ用に他のエンドポイントが追加される可能性があります。

前回書いた通り、Authorization APIはPDP(ポリシー決定ポイント)によって提供されるAPIです。要するにPEP(ポリシー適用ポイント)からの問い合わせに応じて、認可ポリシーを返却する、というAPIですね。本格的に繊細な認可制御をしようとするとリソースやサブジェクトの情報も必要になるので、将来的にはその辺りまで見ていくことになるのかもしれませんね。


1. Introduction

Computational services often implement access control within their components by separating Policy Decision Points (PDPs) from Policy Enforcement Points (PEPs). PDPs and PEPs are defined in XACML and NIST's ABAC SP 800-162. Communication between PDPs and PEPs follows similar patterns across different software and services that require or provide authorization information. The Authorization API described in this document enables different providers to offer PDP and PEP capabilities without having to bind themselves to one particular implementation of a PDP or PEP.

1.はじめに

計算サービスでは、ポリシー決定ポイント (PDP) とポリシー適用ポイント (PEP) を分離することで、コンポーネント内にアクセス制御を実装することがよくあります。PDP と PEP は、XACMLと NIST の ABAC SP 800-162定義されています。PDP と PEP 間の通信は、認可情報を必要とする、または認可情報を提供するさまざまなソフトウェアやサービスで同様のパターンに従います。このドキュメントで説明するAuthorization API を使用すると、さまざまなプロバイダーが、特定の PDP または PEP の実装に縛られることなく、PDP および PEP 機能を提供できます

基本的にはPDP APIの標準化をしていきますよ、ってことですね。


2. Model

The Authorization API is a transport-agnostic API published by the PDP, to which the PEP acts as a client. Possible bindings of this specification, such as HTTPS or gRPC, are described in Transport.

Authorization for the Authorization API itself is out of scope for this document, since authorization for APIs is well-documented elsewhere. For example, the Authorization API's HTTPS binding MAY support authorization using an Authorization header, using a basic or bearer token. Support for OAuth 2.0 ([RFC6749]) is RECOMMENDED.

2.モデル

Authorization API は PDP によって公開されたトランスポートに依存しない API であり、PEP はクライアントとして機能します。HTTPS や gRPC など、この仕様の可能なバインディングについては、トランスポートで説明されています

Authorization API 自体の認可は、API の認可については他の場所で十分に文書化されているため、このドキュメントの範囲外です。たとえば、Authorization API の HTTPS バインディングは、ヘッダーAuthorization、basicまたはトークンを使用した認可をサポートする場合があります。OAuth 2.0 ( [ RFC6749 ] )bearerのサポートが推奨されます

Authorization API自体はトランスポートアグノスティックな設計になっているようです。この辺りは他のAPIと同じく汎用的な思想です。またAuthorization API自体の認可という一瞬混乱する話が出てきますが、PDPサービスを提供するAPIとしてのAuthorization APIと、そのAPIへの認可(OAuth的な意味での認可)をするのはOAuthを使いましょうね、という話です。やっぱりOAuthの「認可」という言葉はここでも混乱を招きますね。クライアントであるPEPへのアクセス権限の付与(委譲)、っていう文脈での「認可」ですね。 

3. Features

The core feature of the Authorization API is the Access Evaluation API, which enables a PEP to find out if a specific request can be permitted to access a specific resource. The following are non-normative examples:

  • Can Alice view document #123?
  • Can Alice view document #123 at 16:30 on Tuesday, June 11, 2024?
  • Can a manager print?

3.特徴

Authorization API のコア機能はアクセス評価 API であり、これにより PEP は特定のリクエストが特定のリソースへのアクセスを許可されるかどうかを確認できます。以下は非規範的な例です: 

  • アリスは文書 #123 を閲覧できますか? 
  • アリスは2024年6月11日火曜日の16:30に文書#123を閲覧できますか? 
  • マネージャーは印刷できますか? 

このAPIの特徴はPEPからの問い合わせに対してアクセス評価を行い結果を返却するというところにありそうですね。

4. API Version

This document describes the API version 1. Any updates to this API through subsequent revisions of this document or other documents MAY augment this API, but MUST NOT modify the API described here. Augmentation MAY include additional API methods or additional parameters to existing API methods, additional authorization mechanisms, or additional optional headers in API requests. All API methods for version 1 MUST be immediately preceded by the relative URL path /v1/.

4. APIバージョン

このドキュメントでは、API バージョン 1 について説明します。このドキュメントまたは他のドキュメントの今後の改訂によるこの API の更新では、この API を拡張できますが、ここで説明する API を変更してはなりません。拡張には、追加の API メソッド、既存の API メソッドへの追加のパラメーター、追加の認証メカニズム、または API リクエスト内の追加のオプション ヘッダーが含まれる場合があります。バージョン 1 のすべての API メソッドの直前には、相対 URL パスがなければなりませ/v1/。

まぁ、ここは互換性のためのバージョニングの話なので、このAPIに限った話じゃありませんので省略。


次からデータモデルの話に入っていくのでまずはここまでです。


2024年9月24日火曜日

Apple Walletで選択的情報開示

こんにちは、富士榮です。

最近、Google WalletやApple Walletに免許証やパスポートが次々と搭載されてきているわけですが、選択的情報開示のUIがようやく見えてきました。

参考)これまでの記事


今回、カリフォルニア州のモバイル運転免許証がApple Walletに搭載されるというニュースを見ると選択的情報開示の動画イメージが掲載されています。

アナウンス
https://www.dmv.ca.gov/portal/california-mdl/apple-wallet/

年齢証明を求めるシナリオです。


Age Over 21という形で21歳以上であることが提示される、という感じになります。



Verifierからの要求に対して全体として提示する・しないの実装となってしまうのは仕方ないんでしょうが、こんな感じで選択的情報開示のUIが実装されてくることが見えてきました。

Age Verificationは良いシナリオである一方で国によって成人年齢が異なるということもあるので、うまく国によって実装が使い分けられるようになっていると良いですね。この辺りがどうなっているのかもう少し調べてみようかと思いました。(確かできた気がするので)

ちなみに国別の成人年齢の一覧をMicrosoftがリストにしてくれているので参考までに。

https://learn.microsoft.com/ja-jp/azure/active-directory-b2c/manage-user-access

2024年9月23日月曜日

AuthZENのAuthorization APIとは(1)

こんにちは、富士榮です。

昨日、AuthZEN WGがAuthorization API 1.0のImplementer's draftを提案している、という話をしましたが、そもそもこの認可APIはどういうものなのか見ていきたいと思います。

いきなり仕様を読んでもいいのですが、AuthZEN WGのCo-Chairで仕様のEditorでもあるAsertoのCEOのOmri Gazittが良い記事を書いているのでまずはこちらを読んでおきましょう。


Authentication is "solved"

The authentication world has mature specifications that are universally adopted, such as OAuth2 and OpenID Connect. This has helped the industry solve "single sign-on for the web".

認証は「解決済み」

認証の世界には、OAuth2 や OpenID Connect など、広く採用されている成熟した仕様があります。これにより、業界は「Web のシングル サインオン」の問題を解決できました。 


OAuth 2.0は置いておいて、認証の世界はOpenID ConnectやSAMLなどのID連携のための仕組みによりシングルサインオンの実現など、複雑性を解決してきました。

Authorization is next

The authorization world has lagged behind. Today, each application has its own way of assigning permissions to users, what we call an "N * M problem".

次は認可です

認可の世界は遅れています。現在、各アプリケーションはユーザーに権限を割り当てる独自の方法を持っており、これを「N * M 問題」と呼びます。


著者がn*m問題として記載している通り、アプリケーションが個々にユーザの権限を管理せざるを得ない、という状況が確かに存在しています。実際、認可を集中管理しにくかった理由としては、アプリケーションごとに保持しているリソースや権限の粒度はバラバラかつ変化が激しく、集中管理するには複雑すぎる、ということがしばしば挙げられます。まさにn*m問題です。

But help is one the way! OpenID AuthZEN aims to become the "OpenID Connect of authorization", and has just entered the review phase for the first Implementer's Draft of the Authorization API version 1.0.

Having served as co-chair of the WG and co-editor of the spec, this means a lot to us at Aserto. Why?

しかし、助けは必ずあります! OpenID AuthZEN は「認可の OpenID Connect」になることを目指しており、Authorization API バージョン 1.0の最初の実装者ドラフトのレビュー段階に入ったところです。

WG の共同議長および仕様の共同編集者を務めた Aserto にとって、これは大きな意味を持ちます。なぜでしょうか?

わくわくしますね!この問題が解けると確かに大きなインパクトです。


Why standardize authorization?

Standards efforts are multi-year affairs, so we don't take them lightly. Standardizing a developer technology needs three things to succeed:

  • It addresses a significant pain point.
  • Competing technology providers find areas where standardization doesn't erode differentiation, but accelerates adoption.
  • It provides significant benefits to consumers and end-users of the technology, which drives adoption.

認可を標準化する理由は何ですか?

標準化の取り組みは数年にわたる作業であるため、私たちはそれを軽視しません。開発者テクノロジーの標準化を成功させるには、次の 3 つのことが必要です。

  • それは重大な問題点に対処します。
  • 競合するテクノロジー プロバイダーは、標準化によって差別化が損なわれることなく、導入が加速される領域を見つけます。
  • これは、テクノロジーの利用者とエンドユーザーに大きなメリットをもたらし、採用を促進します。

これはAuthorization APIに限らず、すべての標準仕様について言えることだと思いますが、実装するプロバイダの競争領域と協調領域の特定から始める必要があるわけです。当然のことながら競争領域では各ベンダが差別化をしていくポイントなので、その領域に関して情報開示はしないわけです。ただ協調した方が全体にとってメリットがある部分は必ず存在するので、そこを特定して標準化をしていくわけです。また、これらのテクノロジーはコンシューマ(実装する人たち)やエンドユーザにとってメリットがなければ設計しても使われることはありません。


ODBC

Early in my career, around 1993, I witnessed this first hand with Open Database Connectivity, or ODBC. Consumers wanted data-centric applications (Excel, Access, Visual Basic, Powerbuilder, and countless more) to be able to talk to a bunch of data sources (Oracle, Sybase, SQL Server, DB2, Informix, and many others).

This is what we call an "N * M" problem: N applications need to build connectors to M data sources. Wasteful and expensive.

ODBC addressed this challenge by defining a universal data access API, which database vendors could implement, and applications could consume, transforming it into an "N + M" problem. All of the sudden, any data application could immediately talk to a whole bunch of data sources simply by being a consumer of ODBC.

My startup, NEON Systems, bet on this standard and rode its success by integrating data-centric applications with a wide variety of enterprise data sources. NEON was so successful it went public in 1999.

ODBC

キャリアの初期、1993 年頃に、私は Open Database Connectivity (ODBC) でこれを直接目にしました。消費者は、データ中心のアプリケーション (Excel、Access、Visual Basic、Powerbuilder など数え切れないほど) が、多数のデータ ソース (Oracle、Sybase、SQL Server、DB2、Informix など) と通信できることを望んでいました。

これは「N * M」問題 と呼ばれるもので、 N 個のアプリケーションがM 個のデータ ソースへのコネクタを構築する必要があります。これは無駄が多く、コストもかかります。

ODBC は、データベース ベンダーが実装し、アプリケーションが使用できるユニバーサル データ アクセス API を定義することでこの課題に対処し、これを「N + M」問題に変換しました。突然、ODBC のコンシューマーになるだけで、あらゆるデータ アプリケーションが大量のデータ ソースとすぐに通信できるようになりました。

私のスタートアップ企業である NEON Systems は、この標準に賭け、データ中心のアプリケーションをさまざまなエンタープライズ データ ソースと統合することで成功を収めました。NEON は大成功を収め、1999 年に株式を公開しました。 

ODBC!今となっては懐かしいですね。。私もめちゃくちゃ使ってました。まさにデータベース管理システム(OracleとSQL Serverなど)が乱立している時代(今もか)にユニバーサルなAPIは必須アイテムでした。まぁ、もちろん固有の機能を使うには各社のクライアントを使う必要があったりしたわけですが。

Open ID Connect

Two decades after ODBC, OpenID Connect (OIDC) became a standard that solved a similar problem. N SaaS applications needed to integrate with M corporate identity providers. By adopting the OIDC protocol, each SaaS app allows its users to sign-in with their corporate identity provider (Okta, Azure AD, Google Workspace, Ping ID, etc).

Admins no longer have to worry about corporate users creating their own logins on each SaaS application - they can use a single corporate login across all these applications. Onboarding and offboarding become a breeze!

At Microsoft, our vision for this started with SAML, WS-Security, and WS-Federation in the early 2000's, but it wasn't until 2013 that OIDC reached its tipping point. The journey took a while, but the result has been nothing short of transformational.

OpenID Connect

ODBC の 20 年後、OpenID Connect (OIDC) が同様の問題を解決する標準になりました。N個のSaaS アプリケーションをM個の企業 ID プロバイダーと統合する必要がありました。OIDC プロトコルを採用することで、各 SaaS アプリのユーザーは企業 ID プロバイダー (Okta、Azure AD、Google Workspace、Ping ID など) を使用してサインインできるようになります。

管理者は、企業ユーザーが各 SaaS アプリケーションで独自のログインを作成することを心配する必要がなくなりました。管理者は、これらすべてのアプリケーションで単一の企業ログインを使用できます。オンボーディングとオフボーディングが簡単になります。

Microsoft では、このビジョンは 2000 年代初頭に SAML、WS-Security、WS-Federation から始まりましたが、OIDC が転換点に達したのは 2013 年になってからでした。この道のりには時間がかかりましたが、その結果はまさに変革をもたらすものでした。

まぁ、この辺りまでは歴史の話ですな。

Open ID AuthZEN

Fast forward a decade to 2024: the same "N * M" problem exists in the authorization space. Every corporate application has its own way of assigning permissions to users. And the solution is similar to how applications have externalized authentication to an OIDC-compliant IDP: externalizing authorization to an AuthZEN-compliant Policy Decision Point (PDP).
Applications that do this not only save a bunch of time and effort rolling out their own bespoke authorization. They also allow IT administrators to enforce common policies across applications, ensure compliance across applications, and answer questions like "which users have access to which resources" across applications.
While authorization vendors want to differentiate on expressing policies, ensuring compliance, facilitating forensics, and managing authorization at scale, none of us really care about what the authorization API actually looks like. We all have similar APIs that are arbitrarily different, and they are not a real source of differentiation.
Standardizing the way a policy enforcement point (PEP) such as an application or API gateway calls an authorization platform (PDP) greatly reduces the friction of integrating the PEP with a wide variety of authorization solutions. It helps everyone:
  • Applications and API gateways can integrate with a bunch of externalized authorization systems using a single API, instead of creating bespoke integrations with each.
  • Authorization platforms become relevant to a broader set of applications and other policy enforcement points.
  • IT Administrators have a single "Authorization control plane" to manage policies and entitlements, and answer questions such as "what resources does this user have access to". 

OpenID AuthZEN

10 年後の 2024 年、同じ「N * M」問題が認可の分野で存在します。すべての企業アプリケーションには、ユーザーに権限を割り当てる独自の方法があります。そして、その解決策は、アプリケーションが認証を OIDC 準拠の IDP に外部化する方法と似ています。つまり、認可を AuthZEN 準拠のポリシー決定ポイント (PDP) に外部化します。

これを実行するアプリケーションは、独自のカスタム認証を展開する時間と労力を大幅に節約するだけではありません。IT 管理者は、アプリケーション間で共通のポリシーを適用し、アプリケーション間でコンプライアンスを確保し、アプリケーション間で「どのユーザーがどのリソースにアクセスできるか」などの質問に答えることもできます。

認可ベンダーは、ポリシーの表現、コンプライアンスの確保、フォレンジックの促進、大規模な認可の管理で差別化を図りたいと考えていますが、認可 API が実際にどのようなものであるかについては、誰も気にしていません。ベンダーは皆、任意に異なる類似の API を持っており、それらは差別化の本当の源ではありません。

アプリケーションや API ゲートウェイなどのポリシー適用ポイント (PEP) が認可プラットフォーム (PDP) を呼び出す方法を標準化すると、PEP をさまざまな認可ソリューションと統合する際の摩擦が大幅に軽減されます。これにより、すべての人が次のメリットを享受できます。

  • アプリケーションと API ゲートウェイは、それぞれにカスタマイズされた統合を作成する代わりに、単一の API を使用して多数の外部認証システムと統合できます。
  • 認可プラットフォームは、より広範なアプリケーションやその他のポリシー適用ポイントに関連するようになります。
  • IT 管理者は、ポリシーと権限を管理し、「このユーザーはどのリソースにアクセスできるか」などの質問に答えるための単一の「承認コントロール プレーン」を持ちます。 



まぁ、この手の仕組みとして非常にオーソドックスなアプローチですね。PDPを一箇所に集めて、PEPはそのAPIを通じて呼び出すという仕掛けですね。

What does this milestone mean?

So standardizing authorization is important. Why celebrate this milestone?

We started the OpenID AuthZEN WG in late October 2023. In one short year, we've been able to define a number of iterations of our first spec, the PEP-PDP API. We now have 13 interoperable implementations of a preview version of this spec.

We've learned quite a bit from the interop events we conducted at Identiverse 2024 and EIC 2024, and now have a candidate Implementer's Draft.

This milestone means that vendors can safely incorporate AuthZEN into their products, without worrying that the spec will "move under them". This also means that Policy Enforcement Points, such as API Gateways, SaaS applications, and identity providers can start calling out to AuthZEN PDPs to make authorization decisions.

このマイルストーンは何を意味するのでしょうか?

したがって、認可の標準化は重要です。なぜこのマイルストーンを祝うのでしょうか?

私たちは、2023 年 10 月下旬に OpenID AuthZEN WG を開始しました。わずか 1 年で、最初の仕様であるPEP-PDP APIの反復を何度も定義することができました。現在、この仕様のプレビュー バージョンの相互運用可能な実装が 13 個あります。

私たちは、Identiverse 2024 と EIC 2024 で実施した相互運用イベントから多くのことを学び、現在は実装者ドラフトの候補が揃っています。

このマイルストーンは、ベンダーが仕様が「自分たちの下に移る」ことを心配することなく、AuthZEN を自社の製品に安全に組み込むことができることを意味します。これはまた、API ゲートウェイ、SaaS アプリケーション、ID プロバイダーなどのポリシー適用ポイントが、AuthZEN PDP を呼び出して承認の決定を下せるようになることも意味します。

そう、このAuthZENワーキンググループはまだ1年経ってないんですよね。1年未満でImplementer's draftが出てくるのは異常なスピード感ですね。また、書いてある通り13の相互運用性が確認できる実装があるのもすごいことです。

ちなみに相互運用性検証の結果はこちらで見れます。

https://authzen-interop.net/


What's next?

The review and voting period extends through November 9, 2024. At that point, we will have a formal Implementer's Draft.

Aserto is committed to incorporating AuthZEN in a first-class way into our authorization engine, Topaz, as well as our commercial products.

In addition, we're looking forward to working with the community to create developer SDKs for a wide variety of languages, and working with API gateway vendors to make it trivial to call an AuthZEN-compliant PDP from a request filter.

The next AuthZEN interop event is at Authenticate 2024 on October 15, 2024. We plan on testing the next iteration of the spec, which defines how to send multiple evaluations in a single request, facilitating scenarios such as turning on and off features in a web or native UI based on a user's permissions.

次は何ですか?

レビューと投票期間は 2024 年 11 月 9 日までです。その時点で、正式なImplementer's draftが作成されます。

Aserto は、AuthZEN を当社の認証エンジンTopazおよび商用製品に最高レベルの方法で組み込むことに尽力しています。

さらに、私たちはコミュニティと協力してさまざまな言語向けの開発者 SDK を作成し、API ゲートウェイ ベンダーと協力してリクエスト フィルターから AuthZEN 準拠の PDP を簡単に呼び出せるようにすることを楽しみにしています。

次の AuthZEN 相互運用イベントは、2024 年 10 月 15 日の Authenticate 2024 です。私たちは、単一のリクエストで複数の評価を送信する方法を定義し、ユーザーの権限に基づいて Web またはネイティブ UI で機能をオン/オフにするなどのシナリオを容易にする、仕様の次のイテレーションをテストする予定です。

先にも書きましたが相互運用性テストが継続的に行われているのはとても良いことですね。DCP WGのVerifiable Credentials関連の仕様や、SSFでも相互運用性テストが積極的に実施されているのと同様に仕様を作りつつ実装で試験をしていくという流れは標準化にとって非常に重要な意味を持ちます。

Future work

We have lofty goals for AuthZEN. We will define a search API which standardizes answering questions like "which resources does this user have access to", and "which users can access this resource".

We also plan on defining ways in which upstream data sources can send data updates to policy decision points and policy information points, so that PDPs can have the latest user, group, and relationship information when evaluating access decisions.

今後の仕事

AuthZEN には高い目標があります。 「このユーザーはどのリソースにアクセスできるか」や「どのユーザーがこのリソースにアクセスできるのか」といった質問への回答を標準化する検索 API を定義します。

また、上流のデータ ソースがポリシー決定ポイントとポリシー情報ポイントにデータ更新を送信する方法も定義する予定です。これにより、PDP はアクセス決定を評価する際に最新のユーザー、グループ、関係情報を取得できるようになります。 

今後の動きに期待です!楽しみですね。


今回はイントロということでしたので、次から実際の仕様を見ていこうと思います。


2024年9月22日日曜日

AuthZEN WGがAuthorization APIのImplementer's draftがPublic Review期間に入ります

こんにちは、富士榮です。

XACMLの苦い思い出からでしょうか?認可とかロール管理は鬼門と言われて久しいわけですが、昨年末〜今年の頭にOpenID Foundatinoのワーキンググループとして立ち上がったばかりのAuthZEN WGが早くもAuthorization API 1.0のImplementer's draftを出してきました。




今後のスケジュールはこんな感じです。
  • Implementer’s Draft public review period: Wednesday, September 17, 2024 to Friday, November 1, 2024 (45 days)
  • Implementer’s Draft vote announcement: Saturday, October 19, 2024
  • Implementer's Draft early voting opens: Saturday, October 26, 2024 *
  • Implementer’s Draft voting period: Saturday, November 2, 2024 to Saturday, November 9, 2024 (7 days)
対象となるAuthorization APIの仕様はこちらにあります。

今年は読むものが多すぎる・・・、まぁ徐々に読んでいきましょう。

2024年9月21日土曜日

LINEログインの拡張に向けたロードマップ

こんにちは、富士榮です。

LINEログインやLIFFのロードマップが更新されていますね。

https://developers.line.biz/ja/docs/line-login/roadmap/



ログイン回りをピックアップしておきましょう。

リリース時期機能概要対象プロダクト
2024年後半LINEログインのダークモード表示の対象拡大LINEログインにおいて、ダークモード表示に対応するページの範囲を拡大します。LINEログイン
時期未定LINEログイン v1、v2.0へのアクセス遮断既に廃止されているLINEログイン v1、および非推奨となっているLINEログイン v2.0へのアクセスを完全に遮断します。LINEログイン
継続実施アクセシビリティ対応LINEログインを、より多くのエンドユーザーにとって使いやすいプロダクトにするため、アクセシビリティ対応を継続して推進していきます。LINEログイン
継続実施同意画面をより使いやすいものに改善LINEログインを、より多くのエンドユーザーにとって使いやすいプロダクトにするため、A/Bテストなどの分析に基づき、機能やUIの改善を継続して推進していきます。LINEログイン



まぁ、見た目の話が多いですが、旧バージョンのAPIが遮断される時期は引き続きみておかないといけませんね。(少なくとも1.0はもう使われていませんが、2.0からは結構使われているので)