/// <summary>FAPI2CCスターターを組み立てて返す</summary> /// <param name="response_type">string</param> /// <returns>組み立てたFAPI2CCスターター</returns> private async Task <string> AssembleFAPI2CCStarterAsync(string response_type) { // 秘密鍵 DigitalSignX509 dsX509 = new DigitalSignX509( CmnClientParams.RsaPfxFilePath, CmnClientParams.RsaPfxPassword, HashAlgorithmName.SHA256); if (this.ClarifyRedirectUri) { this.RedirectUri = Helper.GetInstance().GetClientsRedirectUri(this.ClientId, response_type); } // テストコードで、clientを識別するために、Stateに細工する。 // TestCase(max_age, auth_time): 無し, 不要、有り, 不要、無し, 必要 string requestObject = RequestObject.Create(this.ClientId, Config.OAuth2AuthorizationServerEndpointsRootURI + OAuth2AndOIDCParams.RequestObjectRegUri, response_type, this.ResponseMode, this.RedirectUri, Const.OidcScopes, OAuth2AndOIDCEnum.ClientMode.fapi2.ToStringByEmit() + ":" + this.State, this.Nonce, "600", "", "", new ClaimsInRO( // userinfo > claims new Dictionary <string, object>() { { "picture", new { essential = true } } }, // id_token > claims new Dictionary <string, object>() { { "hoge", new { essential = true } } }, // id_token > arc new { essential = true, values = new string[] { OAuth2AndOIDCConst.UrnLoA1, OAuth2AndOIDCConst.UrnLoA2 } }), ((RSA)dsX509.AsymmetricAlgorithm).ExportParameters(true)); // 検証テスト if (RequestObject.Verify(requestObject, out string iss, ((RSA)dsX509.AsymmetricAlgorithm).ExportParameters(false))) { // 検証できた。 // RequestObjectを登録する。 string response = await Helper.GetInstance().RegisterRequestObjectAsync( new Uri(Config.OAuth2AuthorizationServerEndpointsRootURI + OAuth2AndOIDCParams.RequestObjectRegUri), requestObject); // レスポンスを確認し、request_uriを抽出。 string request_uri = (string)((JObject)JsonConvert .DeserializeObject(response))[OAuth2AndOIDCConst.request_uri]; // request_uriの認可リクエストを投げる。 return(this.OAuth2AuthorizeEndpoint + string.Format("?request_uri={0}", request_uri)); }