Ejemplo n.º 1
0
        /// <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));
            }