IDSCP2_example
问题1:一开始运行报400错误码
应该是请求错误
请求中的client_id,DAPS服务器不认识
解决1:
自己本地运行Omejdn-server 搭建DAPS令牌颁发服务器
需要安装Ruby解释器,搭建运行环境
在Omejdn-server中注册 需要认证的连接器ID
400错误码得到解决
注意点1:server和client都需要注册,server不注册会返回invalid_dat
发生如下错误:
[[17] Unable to process JOSE object (cause: org.jose4j.lang.JoseException: Invalid JOSE Compact Serialization. Expecting either 3 or 5 parts for JWS or JWE respectively but was 1.): INVALID_DAT]
注意点2:grant_type必须要加上client_credentials
注意点3:scope必须是idsc:IDS_CONNECTOR_ATTRIBUTES_ALL
问题2:localhost证书过期
在server和client第一步握手,就是建立TLS安全连接,通过交换证书,互相验证。
证书过期会报错。
解决2:
修改Host文件中加入 consumer-core和provider-core两个本地域名
使用非localhost的证书。
成功2:
连接器server和client可以建立TLS连接
问题3:500返回码,内部错误,在DAPS服务器filter_scopes中,有string转为int的问题
解决3:
通过查看ruby的语法和调试
发现在select对数组中每一个元素进行操作时,在resource_owner.attributes[key]处有问题
由于该逻辑是过滤范围,返回一个范围的数组,
于是改写了本来的逻辑,不用过滤直接将scope返回
待解决:
需要查看原来的逻辑,查看过滤时做了什么,改为不出错的逻辑。
问题4:返回的DAT中没有aud受众
[[8] Audience (aud) claim [] doesn’t contain an acceptable identifier. Expected one of [IDS_Connector, idsc:IDS_CONNECTORS_ALL] as an aud value.,
解决4:
改写DAPS Server返回的DAT的逻辑:
在DAPS Server /token的端点中,when 'client_credentials’逻辑中,resources就是最后返回的aud,直接先修改该字段为[‘IDS_Connector’]
尚未解决:
resources该字段如何自动生成?
问题5:DAT中的颁发者与预期的颁发者不一样
[12] Issuer (iss) claim value (http://localhost:4567) doesn’t match expected value of http://localhost]
解决5:
在DAPS_Driver中改写了jwtConsumer中的setExpectedIssuer的值
但是按照dapsMeta.issuer的值应该是一样的,不知道为什么会发生错误。
问题6:JWK获取错误
解决6:
原因是获取密钥的端点路径错误,在IDSCP2-JVM某个地方,jwks_endpoint的路径加了一个/well-knowns,导致拿不到密钥。
尚未解决的问题7:验证预期的证书指纹
该逻辑是验证对方的证书指纹,但是DAT中并没有返回证书的逻辑
目前返回的是最直接的DAT,只通过该client_id是否进行注册而进行验证,但是没有部署公钥,通过公钥解密签名进行验证,所以也没有返回证书指纹。